소켓 통신을 배우고 있는데요 코드에서 어떤땐 SOCKET_ERROR로 어떤땐 INVALID_SOCKET으로 에러를 받던데
혹시 두 코드의 차이가 뭔지 알수있을까요?
/* * This is used instead of -1, since the * SOCKET type is unsigned. */ #define INVALID_SOCKET (SOCKET)(~0) #define SOCKET_ERROR (-1)
위 내용은 winsock2.h 에 나오는 정의입니다. SOCKET_ERROR는 정수형이고, INVALID_SOCKET은 SOCKET 타입(으로 캐스팅된 정수형)이죠.
socket()이나 accept()처럼 SOCKET 타입을 반환하는 함수에서는 오류발생시 INVALID_SOCKET을 반환하고, connect()나 bind()처럼 int형을 반환하는 함수에서는 SOCKET_ERROR를 반환하는 것이죠. 실질적인 오류코드는 WSAGetLastError()로 파악하고요.
winsock말고 유닉스 계열의 bsd 소켓에서는 위 함수들이 오류발생시 모두 -1을 반환하고 오류코드는 errno로 파악합니다.
궁금한점이 해결됬습니다
갑자기 차이가 뭘까 하고 검색해봤는데, 바로 딱 답이 나오는군요. 속이 시원하네요 ~ ^^
/*
위 내용은 winsock2.h 에 나오는 정의입니다. SOCKET_ERROR는 정수형이고, INVALID_SOCKET은 SOCKET 타입(으로 캐스팅된 정수형)이죠.
socket()이나 accept()처럼 SOCKET 타입을 반환하는 함수에서는 오류발생시 INVALID_SOCKET을 반환하고, connect()나 bind()처럼 int형을 반환하는 함수에서는 SOCKET_ERROR를 반환하는 것이죠. 실질적인 오류코드는 WSAGetLastError()로 파악하고요.
winsock말고 유닉스 계열의 bsd 소켓에서는 위 함수들이 오류발생시 모두 -1을 반환하고 오류코드는 errno로 파악합니다.
감사합니다 :)
궁금한점이 해결됬습니다
속이 시원하네요 ~ ^^
갑자기 차이가 뭘까 하고 검색해봤는데, 바로 딱 답이 나오는군요.
속이 시원하네요 ~ ^^