ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서버 코딩 중 있었던 수신 직후 소켓이 닫히던 버그
    프로그래밍/의문 2015. 5. 25. 03:23
    반응형


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    void 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 call
          WSAEINVAL    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를 했던 거다. 너무 간단한 부분이라 문제가 없을 거라고 생각하고 버퍼 설정 부분과 완료 포트 부분을 중심으로 보고 있었다. -_-;

    반응형
Designed by Tistory.