-
서버 코딩 중 있었던 수신 직후 소켓이 닫히던 버그프로그래밍/의문 2015. 5. 25. 03:23반응형12345678910111213141516171819202122232425262728293031323334void User::CheckIoError(int result){if (result == SOCKET_ERROR){// ERROR_IO_PENDING 오버랩 연산이 성공적으로 시작되었으나, 나중에 완료될 것.const auto error = WSAGetLastError();if (error != WSA_IO_PENDING) // * 이 부분이 error = WSA_IO_PENDING으로 되어있었다.{// 여기에 걸리면 진짜 오류다.this->Close();/*WSAECONNABORTED 10053 타임아웃 혹은 상대방의 접속종료들과 같은 소프트웨어적인 문제로 연결이 끊겼음.WSAECONNRESET 10054 연결이 원격 호스트에 의해 재설정되었음.WSAEDISCON 10101 종료가 진행중임WSAEFAULT 10014 잘못된 주소를 사용했음WSAEINPROGRESS 10036 블록화 함수가 진행되는 동안 부적절한 윈속 API함수가 호출.WSAEINTR 10004 WSACancelBlockingCall()에 의해 블록화 호출이 취소: Interrupted system callWSAEINVAL 10022 바인딩 실패. 이미 bind된 소켓에 바인드하거나 주소체계가 일관적이지 않을 때WSAEMSGSIZE 10040 송수신에 사용된 데이터가 버퍼의 크기를 초과해서 크기에 맞게 잘렸음WSAENETDOWN 10050 네트워크 서브 시스템에 문제가 있음. 네트워크 접속 끊김등.WSAENETRESET 10052 네트워크 재설정으로 연결이 끊어졌음.WSAENOTCONN 10057 연결되지 않은 소켓임. 연결되지 않은 소켓에 읽고 쓰는 경우WSAENOTSOCK 10038 잘못된 소켓기술자를 사용했음WSAEOPNOTSUPP 10045 소켓이 지원하지 않는 명령을 사용했음. listen()함수를 데이터그램 통신 (SO_DGRAM)에서 호출WSAESHUTDOWN 10058 소켓이 종료되었음. 종료된 소켓에 데이터를 읽고 쓰려 경우WSAETIMEDOUT 10060 접속시도 제한 시간 초과WSAEWOULDBLOCK 10035 non overlapped 소켓 : 비 봉쇄 소켓에 아직 읽을 데이터가 없음, overlapped(:12) 소켓 : 너무 많은 중첩 입출력 요구가 있음WSANOTINITIALISED 10093 WSAStartup() 함수가 성공적으로 실행되지 않은 상황에서 윈속 함수를 호출했을 때WSA_IO_PENDING 997 Overlapped 연산은 나중에 완료될 것이다. 중첩 연산을 위한 준비가 되었으나, 즉시 완료되지 않았을 경우발생WSA_OPERATION_ABORTED 995 overlapped(:12) 연산이 중단 되었다.*/}}}
cs 8번 라인이 error = WSA_IO_PENDING로 되어있었다. 대입 연산을 하여 무조건 저 조건문에 걸려 Close를 했던 거다. 너무 간단한 부분이라 문제가 없을 거라고 생각하고 버퍼 설정 부분과 완료 포트 부분을 중심으로 보고 있었다. -_-;
반응형'프로그래밍 > 의문' 카테고리의 다른 글
asio udp client 작업 중 람다 캡처를 잘못 사용한 문제 (0) 2015.07.14 수신 오류로 착각한 송신 오류 (0) 2015.06.10 C++ 서버 프레임워크 제작 중 연산자 재정의로 인해 발생한 버그 (0) 2015.05.23 컴파일러 경고 warning C4127 (0) 2015.03.20 코딩 스타일은 개발자의 지문 (0) 2015.02.12