제가 AcceptEx를 통해서 비동기로 100여개 정도의 비동기 Accept를 미리 하였습니다.
그런데 어디서 잘못된 것인지
클라이언트 하나가 접속하면 Accept가 잘되는데 2번째 접속하면 Accept메세지를 안 받다가
1번째 클라이언트 접속이 끊기면 그제서야 2번째 접속이 성공합니다.
어느 부분을 의심해 보는 게 좋을까요?
고수님들의 답변 부탁드립니다.
[GPG 4 글 6.2] IOCP AcceptEx함수 관련한 질문 입니다.
Moderator: 류광
음. 다음 부분을 집중적으로 살펴보세요.
AcceptEx 부분의 중요부분 소스
클라이언트 접속시 처리해주는부분,
클라이언트 접속닫기시 처리해주는부분.
뭐가 문제일까요? 보이지 않아서 모르겠네요.
클라이언트 접속시 처리해주는부분,
클라이언트 접속닫기시 처리해주는부분.
뭐가 문제일까요? 보이지 않아서 모르겠네요.
생성한 socket 에 setsockopt로 SO_REUSEADDR을 지정하지 않으신 게 아닌지...
socket 생성 후에 Accept용 소켓은 반복적으로 재사용 가능한 소켓임을 명시적으로 지정하기 위해 아래와 같은 식으로 setsockopt 함수를 호출해야 합니다.
이걸 하셨는데도 그렇다면 위에 분 답변처럼 각 이벤트에 대한 처리 시 소켓에 대한 핸들링이 제대로 되고 있는지를 꼼꼼히 확인해봐야 할 것 같네요.
Code: Select all
char i = 1;
if( setsockopt( m_socket, SOL_SOCKET | IPPROTO_TCP, SO_REUSEADDR, &i, sizeof( i ) ) )
{
// 오류 발생. WSAGetLastError / GetLastError로 오류 코드 체크 후 오류 처리.
}