더북(TheBook)

3.7 소켓 부가 옵션

 

소켓의 송수신 동작을 다양한 옵션으로 제어할 수 있다. 소켓에 옵션을 지정하려면 setsockopt()를 호출한다.

int setsockopt(SOCKET sock, int level, int optname,
    const char* optval, int optlen);

sock은 옵션을 지정하려는 소켓이다.

leveloptname을 쌍으로 하여 옵션의 종류를 지정한다. 레벨은 옵션의 범주를 나타내는 정숫값이고, optname은 개별 옵션을 뜻한다.

optval은 옵션 값이 담긴 곳을 가리키는 포인터이다.12

optlenoptval이 가리키는 데이터의 길이이다. 옵션이 정숫값이면 optlen은 4가 되어야 한다.

setsockopt() 함수는 성공 시 0을 리턴하고, 에러가 있으면 -1을 리턴한다.

 


 

12  역주 옵션 값 자체가 아니다! 값이 담긴 곳을 가리키는 포인터이다. 게다가 그 포인터를 항상 const char*로 캐스팅해서 넘겨야 한다! 처음 접하면 무척 헷갈리므로 주의하자. 예를 들어 SO_REUSEADDR을 설정하려면 다음과 같이 호출해야 한다.

 

BOOL reuseAddr = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuseAddr, sizeof(reuseAddr));

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.