프로그래밍 QnA + 설치 및 활용 QnA

westact의 이미지

소켓프로그램에서 non-blocking IO 시 이상한 현상이 있어 의견을 여쭙니다.

소켓서버에 하나의 프로세스에서 다수의 클라이언트를 받아 멀티쓰레드가 아닌, poll 의 다중입출력 방식을 통해 서버를 구현하였습니다.

간헐적으로 한가지 문제가 발생하여 해결하지 못하고 다른분들의 같은 경험이 있으신지 궁금하여 글을 올립니다.

서버입장에서 하나의 사용자가 socket 으로 접속하면, 이를 accept 한 후 setsocket 옵션을 통해

l_onoff = 1;
l_linger = 0;

로 변경과 함께 O_NONBLOCK 옵션을 추가하여 non-blocking I/O 로 통신을 하도록 하였습니다.

문제는 이와 같은 상태로 약 600명의 동시접속자가 사용하고 있을 때, 간헐적으로 클라이언트가 접속을 끊지도 아니하였는데도 불구하고 서버에서는 read() 함수로부터 0 을 반환받고, errno = ECONNRESET 으로 설정되어 클라이언트가 접속을 끊었다는 값을 받는 경우가 있는것이 문제입니다.

zepeh의 이미지

소켓 풀을 만들고 모든 소켓들에 accept를 걸어놔도 아무런 문제가 없을까요?


윈도우에는 AcceptEx라는 함수가 저런걸 지원하는 함수로 알고있습니다.

n개의 소켓에 대해 accept를 걸어놓고, accept 완료를 통보받는 거죠.

하지만 다른 os에서도 저런 비동기 accept 방식이 통하는지 궁금합니다.

제가 본 네트워크 라이브러리의 예제들은 accept를 하나씩 받더라고요.

혹시 다른 os에는 하나씩 처리하는 방식으로 해야하는 걸까요?

jonyon의 이미지

소켓 프로그래밍 첨하는데 버퍼링같은걸 어떻게 구현할지 모르겠습니다 ㅠㅠ

안녕하세요. 맨날 눈팅만 하다가 처음으로 가입해서 포럼주제 써봅니다.

KLDP 위키의 BeeJNetworkProgramming 문서 보면서 소켓 프로그래밍 공부하고 있습니다.
번역해주신분께 너무나 감사할 따름입니다 ㅎㅎ

제가 만들고 있는 프로그램은
i)사용자로부터 URI를 받아서
ii)해당하는 HTML문서를 네트워크에서 받아오고
iii)그 문서를 파일로 저장하는
프로그램입니다.

우선 i)번 과정은 대부분 된것 같은데, ii)번 과정이 문제입니다.
프로그래밍 연습할때는 끽해야 자료 크기가 바이트단위에서 노는데, 인터넷에 돌아다니는 html문서는 1KB가 넘는 경우가 많습니다 ㅠㅠ
이 커다란 자료를 받아오려고 두가지 방법을 생각해 봤는데,
1. 엄청나게 커다란 변수를 만든다!
2. 조금씩 받아와서 합친다!
아무래도 1번은 좀 아닌것 같고, 2번 방법을 써야될것 같더라구요.

qkrwncks593의 이미지

mysql 사용자 프로필사진 질문.

게시판리스트에서 글쓴사람들의 프로필사진을 동시에 불러와야합니다.

게시판 db 에 글쓴사람의 프로필사진 링크를 저장하는 컬럼을 만들어서 저장할려고했는데 이렇게하면 글쓴사람이 프로필사진을 변경하게되면

게시판 db 에 저장된 프로필사진 링크를 전부다 변경해야되서 속도상 성능문제가 있을거같아서 다른방법을 생각중입니다.

어떤방법을 사용해야 좋을까요?

h4n9u1의 이미지

데이터베이스 서버 활용에 관해서 질문 입니다.

이번에 웹과 어플리케이션 서버를 동시에 처리할 수 있는 서버를 구현하는 중에 있습니다.
Node.js와 Express그리고 Socket.io를 사용하니 그렇게 어려운 것도 아니더라고요.

그런데 데이터베이스를 선택하는데 막혔습니다. 도와주시면 감사하겠습니다.

클라이언트는 무료로 제공되나 서비스를 유료로 제공하는 방식으로 작동합니다. 클라이언트 내부 데이터베이스는 SQLite3와 Json, Xml을 사용할 생각입니다.

1. 현재 서버 데이터베이스 후보에 MySQL, PostgreSQL, SQLite3, MongoDB등이 있습니다. 이 중에서 서버 소스 공개 없이 사용할 수 있는 데이터베이스는 무엇이고 어느것이 가장 성능에 좋을까요?

2. 제가 선택한 데이터베이스 후보외에도 따로 사용할만한 DBMS가 있나요?(단, 리눅스 시스템을 지원해야합니다.)

jongmiss의 이미지

SetWindowsHookEx 으로 dll injection 공격시 방어 방법에 대해 문의드립니다.

DLL Injection 공격시 방어하는 방법에 대해 궁금한데요.
여기저기 찾아보았더니, 아래와 같은 방법으로 방어할수 있다고 합니다.

1. SetWindowsHookEx 호출시 내부적으로 user32.dll의 ClientLoadLibrary 를 먼저 호출
2. ClientLoadLibrary 주소에 RET 어셈블리어 코드를 삽입
(출처: http://ryangs.egloos.com/v/758078)

심플한것 같아 시도해봤지만, 해당 함수는 존재하지 않아, 주소를 가져올 방법이 없었습니다. (dumpbin 으로 함수리스트 확인)
ex) FARPROC pAddress = (FARPROC)::GetProcAddress(::GetModuleHandleA("user32.dll"), "ClientLoadLibrary");

혹시, 다른방법이 있을까요? 도움부탁드립니다~

arsestar의 이미지

nfs 질문이있습니다

현재 파일서버 1대

웹서버 2대를 이용해 파일서버의 디렉토리를 웹서버에 마운트해서 사용하려고 합니다

idmapd.conf 를 이용해 기존 파일서버에 있는 파일들의 유저를 웹서버와 맞춰놨습니다

그런데 파일서버에 새로운 유저를 생성하고 웹서버에서 보면 nobody로 나옵니다..

어떻게 해결해야될까요?

BrownBear의 이미지

리스트에 대해서 질문합니다.

class ABCDE
{
private:
list ListStorage;

public:
ABCDE();
~ABCDE();
};

리스트를 private에서 변수로 선언했을 때 ~ABCDE에서 ListStorage.clear(); 즉 리스트를 굳이 클리어 해줄필요가 없나요?

두번째로 리스트에 대한 iterator의 유효성을 검사하려고합니다.

그런데 이게

list::iterator ListIterator;

if(ListIterator == NULL); //컴파일 오류

리스트 Iterator에 대한 NULL을 검사하는 방법이 없나요?

임시적으로 *(unsigned char*)(&Iterator) == NULL 이런식으로 하고 있기는 한데 이게 검증이 안된 방법이라 안전한지 모르겠네요.

anywhere의 이미지

montavista 란

안녕하세요 리눅스 입문자 입니다.

montavista , mips 이런 말들을 많이 본거 같은데

이게 뭔지 설명좀 부탁드려요 될까요^^

페이지

프로그래밍 QnA + 설치 및 활용 QnA 구독하기