작성
·
473
0
최종적에서 Recv가 정상적으로 처리되는것보다 -1로 리턴되는경우가 대부분입니다.
코드를 다운받아서 해봐도 어떨때는 정상적으로 되다가 다시작동하면 -1이 리턴되길 반복합니다.
무엇이 문제일까요?
답변 4
0
저도 똑같은 증상을 겪었습니다. 그래서 좀 더 자세히 코드를 분석한 결과 문제점을 찾을 수 있었습니다.
지금은 많이 늦긴하지만 똑같은 증상을 겪는 분이 있을까봐 댓글 남깁니다.
해당 문제는 Client Session 소켓 체크에서 FD_READ와 FD_WRITE를 동시에 처리하여 발생한 문제 같습니다.
때문에 FD_WRITE는 항상 참이되어 첫번째 루프에서 Read Buffer가 0 이라도 해당 조건문으로 들어와 recv()를 호출하게 됩니다.
하지만 ReadBuffer가 0 임으로 반환값을 -1이 되고
해당 소켓의 s.recvByte = -1 이 되어, 다음 루프부터 recv()가 있는 if(s.recvByte == 0) 조건문이 거짓이 되어 더이상 recv()를 못하는 상황이 된것이 문제입니다.
그래서 저는 if(s.recvByte == 0 && networkEvents.lNetworkEvents & FD_READ) 이렇게 수정하여 정상작동 하였습니다.
0
0
0
네트워크쪽은 일어날 수 있는 문제의 경우의 수가 너무 많아
위 내용으로는 저도 알 수 없습니다.
에러 코드를 로그로 찍어보고, 몇번이 나오는지 확인이 필요합니다. (WSAGetLastError 등)
WSAEWOULDBLOCK이 계속 뜹니다