WSASend에 인자들을 보면, 읽기에만 IOCP를 사용하는 것 같습니다. 서버는 보내기만 하고 받는 쪽에서는 연결만 하고 받지 않도록 테스트 프로그램을 만들어서 해보면 지금과 같은 현상이 발생할 겁니다.
WSASend에 IOCP를 사용하도록 하고 해당 동작의 완료때 보내진 양에 따라 버퍼에 있는 나머지 것들을 추려서 보내는 형태로 하고, 일정 시간동안 완료가 일어나지 않는다면 접속을 강제로 끊어버리는게 나을 것 같습니다.
그리고 블러킹/넌블러킹 소켓과 오버랩 소켓은 서로 관계가 없습니다. 오버랩 소켓으로 생성하였다 하더라도 현재처럼 인자가 무효라면 블럭되는게 맞습니다. 아래 문장을 확인하세요.
Quote:
WSA_FLAG_OVERLAPPED: This flag causes an overlapped socket to be created. Overlapped sockets can utilize WSASend, WSASendTo, WSARecv, WSARecvFrom, and WSAIoctl for overlapped I/O operations, which allow multiple operations to be initiated and in progress simultaneously. All functions that allow overlapped operation (WSASend, WSARecv, WSASendTo, WSARecvFrom, WSAIoctl) also support nonoverlapped usage on an overlapped socket if the values for parameters related to overlapped operations are NULL.
WSASend에 인자들을
WSASend에 인자들을 보면, 읽기에만 IOCP를 사용하는 것 같습니다. 서버는 보내기만 하고 받는 쪽에서는 연결만 하고 받지 않도록 테스트 프로그램을 만들어서 해보면 지금과 같은 현상이 발생할 겁니다.
WSASend에 IOCP를 사용하도록 하고 해당 동작의 완료때 보내진 양에 따라 버퍼에 있는 나머지 것들을 추려서 보내는 형태로 하고, 일정 시간동안 완료가 일어나지 않는다면 접속을 강제로 끊어버리는게 나을 것 같습니다.
그리고 블러킹/넌블러킹 소켓과 오버랩 소켓은 서로 관계가 없습니다. 오버랩 소켓으로 생성하였다 하더라도 현재처럼 인자가 무효라면 블럭되는게 맞습니다. 아래 문장을 확인하세요.
늦었지만...
답변 감사드립니다~!!
댓글 달기