본문 바로가기

MFC

[MFC] CSocket(비동기) Error정리

//주의 사항!!! : MSDN 한글페이지가 MS에서 자동 기계번역을 하였기 때문에 꼭!! 참조 URL에서 원문을 확인.

// MSDN 비동기 소켓 Class 참조 URL : http://msdn.microsoft.com/ko-kr/library/3d46645f.aspx


CSocket m_sock; //windows socket

// CSocket의 GetLastError()를 이용하여, 오류코드를 검색한다.


//1. Create()

if(m_sock.Create() == false)

{

int err = m_sock.GetLastError();

//error code 참조 URL: http://msdn.microsoft.com/ko-kr/library/xz019029.aspx

/*

WSANOTINITIALISED 성공적으로 AfxSocketInit 이 API를 사용 하기 전에 발생 해야 합니다.

WSAENETDOWN 는 Windows 소켓 구현이 감지 네트워크 하위 시스템 실패 합니다.

WSAEAFNOSUPPORT 지정 된 주소 패밀리가 지원 되지 않습니다.

WSAEINPROGRESS Windows 소켓 블로킹 작업이 진행 중입니다.

WSAEMFILE 없음 자세한 파일 설명자를 사용할 수 있습니다.

WSAENOBUFS버퍼 공간이 없습니다 사용할 수 있습니다. 소켓을 만들 수 없습니다.

WSAEPROTONOSUPPORT 지정 된 포트는 지원 되지 않습니다.

WSAEPROTOTYPE 지정 된 포트를이 소켓에 대 한 형식이 잘못 되었습니다.

WSAESOCKTNOSUPPORT 이 주소 패밀리에 지정 된 소켓 형식이 지원 되지 않습니다.

*/

}


//2. Connect()

if(m_sock.Connect("localhost", 6565) == false)

{

int err = m_sock.GetLastError();

//error code 참조 URL: http://msdn.microsoft.com/ko-kr/library/xfaaxdxe.aspx

/*

0 함수가 성공적으로 실행 합니다.

WSAEADDRINUSE 지정한 주소가 이미 사용 중입니다.

WSAEADDRNOTAVAIL 지정 된 주소는 로컬 컴퓨터에서 사용할 수 없습니다.

WSAEAFNOSUPPORT 주소에 지정 된 제품군이이 소켓을 사용할 수 없습니다.

WSAECONNREFUSED 연결 시도가 강제로 거부 되었습니다.

WSAEDESTADDRREQ 대상 주소입니다.

WSAEFAULT 의 lpSockAddrLen 인수가 잘못 되었습니다.

WSAEINVAL 소켓 주소가 이미 바인딩되어 있습니다.

WSAEISCONN 소켓이 이미 연결 되어 있습니다.

WSAEMFILE 없음 자세한 파일 설명자를 사용할 수 있습니다.

WSAENETUNREACH 네트워크에서이 호스트에 연결할 수 없습니다.

WSAENOBUFS버퍼 공간이 없습니다 사용할 수 있습니다. 소켓을 연결할 수 없습니다.

WSAENOTCONN 소켓이 연결 되어 있지 않습니다.

WSAENOTSOCK 않은 소켓 파일 설명자입니다.

WSAETIMEDOUT 에 대 한 연결을 설정 하지 않고 연결 시도가 시간 초과.

*/

}


//3. Send()

int rtn = m_sock.Send(buf, sizeof(buf));

// rtn 값 (리턴값)

// 정상적일 경우, 보낸 데이터의 바이트 수를 반환(작을 수도 있다.),

// 그 외에 경우, SOCKET_ERROR을 반환한다.


if(rtn == SOCKET_ERROR) //오류 발생일때..

{

//GetLastError()함수를 통해 상세 오류 코드를 검색한다.

int err = m_sock.GetLastError();

//error code 참조 URL: http://msdn.microsoft.com/ko-kr/library/xxbked11.aspx

/*

WSANOTINITIALISED 성공적으로 AfxSocketInit 이 API를 사용 하기 전에 발생 합니다.

WSAENETDOWN 는 Windows 소켓 구현이 감지 네트워크 하위 시스템 실패 합니다.

WSAEACCES 요청한 주소가 브로드캐스트 주소를 있지만 적절 한 플래그가 설정 되어 있지 않습니다.

WSAEINPROGRESS Windows 소켓 차단 작업이 진행 중입니다.

WSAEFAULT 의 lpBuf 인수는 유효한 사용자 주소 공간 부분에 아닙니다.

WSAENETRESET Windows 소켓을 삭제 하기 때문에 연결을 다시 설정 해야 합니다.

WSAENOBUFSWindows 소켓 버퍼 교착 상태를 보고합니다.

WSAENOTCONN 소켓이 연결 되어 있지 않습니다.

WSAENOTSOCK 설명자가 소켓이 아닙니다.

WSAEOPNOTSUPP     MSG_OOB 지정 된 소켓 형식의 아닙니다 SOCK_STREAM.

WSAESHUTDOWN ; 아래로 소켓 이미 종료 된 호출할 수 없는 보내기 후 소켓 ShutDown 호출 된 

                                     nHow 1 또는 2로 설정 합니다.

WSAEWOULDBLOCK 소켓 표시 비블로킹으로 요청한 작업이 차단 됩니다.

WSAEMSGSIZE 소켓 형식이 SOCK_DGRAM, 및 데이터 그램을 

                               Windows 소켓 구현에서 지원 되는 최대값 보다 큽니다.

WSAEINVAL 소켓에는 바인딩되지 않은 바인딩할.

WSAECONNABORTED 가상 회로 시간 초과 나 기타 오류로 인해 중단 되었습니다.

WSAECONNRESET 가상 회로 원격 나란히 원래 대로 설정 했습니다.

*/

}


//4. Close() 

Close();

int err = m_sock.GetLastError();

//error code 참조 URL: http://msdn.microsoft.com/ko-kr/library/6654eb41.aspx

/*

0 함수가 성공적으로 실행 합니다.

WSAENETDOWN 는 Windows 소켓 구현이 감지 네트워크 하위 시스템 실패 합니다.

WSAECONNRESET 연결을 원격으로 다시 설정 되었습니다.

WSAECONNABORTED 시간 초과 나 기타 오류로 연결이 중단 되었습니다.

*/


//5. Receive() 

int rtn = Receive(buf, BUF_SIZE);

// rtn 값 (리턴값)

// 정상적일 경우, 수신된 데이터의 바이트 수를 반환, 연결을 닫을경우 '0'을 반환

// 그 외에 경우, SOCKET_ERROR을 반환한다.


if(rtn == SOCKET_ERROR) //오류 발생일때..

{

//GetLastError()함수를 통해 상세 오류 코드를 검색한다.

int err = m_sock.GetLastError();

//error code 참조 URL: http://msdn.microsoft.com/ko-kr/library/ct7d990b.aspx

/*

WSANOTINITIALISED 성공적으로 AfxSocketInit 이 API를 사용 하기 전에 발생 합니다.

WSAENETDOWN 는 Windows 소켓 구현이 감지 네트워크 하위 시스템 실패 합니다.

WSAENOTCONN 소켓이 연결 되어 있지 않습니다.

WSAEINPROGRESS Windows 소켓 차단 작업이 진행 중입니다.

WSAENOTSOCK 설명자가 소켓이 아닙니다.

WSAEOPNOTSUPP   MSG_OOB 지정 된 소켓 형식의 아닙니다 SOCK_STREAM.

WSAESHUTDOWN  아래로 소켓 이미 종료 된 호출할 수 없는 수신 후 소켓 ShutDown 호출 된 

                                   nHow 0 또는 2로 설정 합니다.

WSAEWOULDBLOCK  소켓 표시 되어 비블로킹으로 및 수신 수 작업을 차단 합니다.

WSAEMSGSIZE 데이터 그램이 너무 커서 지정한 버퍼로 하므로 잘렸습니다.

WSAEINVAL 소켓에는 바인딩되지 않은 바인딩할.

WSAECONNABORTED 가상 회로 시간 초과 나 기타 오류로 인해 중단 되었습니다.

WSAECONNRESET 가상 회로 원격 나란히 원래 대로 설정 했습니다.

*/

}


//6. Accept()

if(Accept(m_sock)) //accept성공 

{

AfxMessageBox("Accept 성공!!");

}

else //accept 실패

{

//접속을 실패할 경우, GetLastError()함수를 통해 오류코드를 검색한다.

  int err = m_sock.GetLastError();


//error code 참조 URL: http://msdn.microsoft.com/ko-kr/library/eczhacdy.aspx

/*

WSANOTINITIALISED 성공적으로 AfxSocketInit 이 API를 사용 하기 전에 발생 합니다.

WSAENETDOWN 는 Windows 소켓 구현이 감지 네트워크 하위 시스템 실패 합니다.

WSAEFAULT 의 lpSockAddrLen 인수가 너무 작습니다 (크기 보다는 SOCKADDR 구조).

WSAEINPROGRESS Windows 소켓 블로킹 호출이 진행 중입니다.

WSAEINVAL     Listen범위가 없습니다.

WSAEMFILE 항목에 적용 하는 큐가 비어 및 사용할 수 있는 설명자가 없습니다.

WSAENOBUFS버퍼 공간이 없습니다 사용할 수 있습니다.

WSAENOTSOCK 설명자가 소켓이 아닙니다.

WSAEOPNOTSUPP 참조 된 소켓 연결 지향 서비스를 지 원하는 형식을 아닙니다.

WSAEWOULDBLOCK 소켓 표시 비블로킹으로 및 연결이 받아들여질 수 있습니다.

*/

}

'MFC' 카테고리의 다른 글

[MFC] 확장 DLL 만들기(스크랩)  (0) 2014.02.04
[MFC] 정적 DLL 만들기(스크랩)  (0) 2014.02.03
[MFC] CSocket Timeout 구현하기  (0) 2014.01.22
[MFC] HRESULT 반환값  (0) 2014.01.16
[MFC] Web Browser Control FAQ  (0) 2013.11.21