본문 바로가기

지식/Network

recv 에러

결과값
int형
정상이라면
받은 Bytes를 리턴한고, finish를 받았으면 Zero를 리턴한다.
비정상이라면 SOCKET_ERROR (-1)
에러일때의 상황은 아래중 하나이다.

WSANOTINITIALISED
WSAStartup을 호출하라! 이런 에러는... 나면 안된다 ㅡㅇㅡㅋ

WSAENETDOWN
The network subsystem has failed.

WSAEFAULT
버퍼가 잘못 지정되었다. 사용할수 없는 메모리 영역이다
코딩상의 실수 이거나, 시스템이 아주 심각한 오류상태이다.

WSAENOTCONN
connection이 아직 되지 않았거나, 이미 끝난 상태
연결된것이 없는데 리시브 할수 없는게 당연.

WSAEINTR
The (blocking) call was canceled through WSACancelBlockingCall.

WSAEINPROGRESS
이미 blockin된 소켓이거나 소켓에대한 callback 함수가 진행중이다.
여기저기 쓰레드에서 같은 소켓을 건들때 나기 쉽겠지?

WSAENETRESET
keepalive가 connection이 끊어졌음을 알려준다.

WSAENOTSOCK
The descriptor is not a socket. 헐... 이것도 나면 안되는 에러

WSAEOPNOTSUPP
지원되지 않는 옵션을 설정했다.
예를 들어 MSG_OOB 가 stream 형식이 아닌 소켓에 설정되었다든가...

WSAESHUTDOWN
SD_RECEIVE 가 설정되어 이미 shutdown 된 소켓

WSAEWOULDBLOCK
nonblocking 모드에서 발생하며 receive할게 없을때 메세지

WSAEMSGSIZE
buffer에 담을 수 없는 크기.
TCP라면 나올 수 없는 에러이고 UDP라면 버퍼크기가 너무 작게 지정되어 있을때 메세지

WSAEINVAL
bind 하지 않은 소켓에 receive 했거나,
모르는 flag를 set했거나,
SO_OOBINLINE이 enable된 소켓에 MSG_OOB가 설정되었거나,
len인자가 0보다 작거나 같은값일때
(모두 코딩상의 실수로 나올수 있음)

WSAECONNABORTED
timeout 또는 다른 이유로 connection이 끊겼다.

WSAETIMEDOUT
네트워크 또는 상대방 시스템에 문제가 있어 connection이 끊겼다.
(내 시스템의 문제는 아니란 뜻)

WSAECONNRESET
상대방에서 connection을 reset 하였다