표 3-4에 SOL_SOCKET 레벨의 유용한 옵션을 나열했다.
▼ 표 3-4 SOL_SOCKET 옵션
매크로 |
자료형(윈도/POSIX) |
설명 |
SO_RCVBUF |
int |
이 소켓이 수신용으로 쓸 버퍼의 크기를 지정한다. 수신된 데이터는 모체 프로세스가 recv()나 recvfrom()을 호출할 때까지 이 버퍼에 쌓여있게 된다. TCP 대역폭은 수신 윈도의 크기에 좌우되며, 소켓의 수신 버퍼 크기보다 결코 커질 수 없으므로, 이 값을 바꾸면 대역폭에 큰 영향을 미치게 된다. |
SO_REUSEADDR |
BOOL/int |
네트워크 계층이 다른 소켓에 이미 할당된 IP 주소와 포트 쌍에 중복하여 바인딩하는 것을 허용할지를 결정한다. 디버깅 또는 패킷 스니핑 프로그램을 만들 때 유용하다. 어떤 운영체제에선 관리자 권한이 있어야 이 옵션을 실행할 수 있다. |
SO_RECVTIMEO |
DWORD/timeval |
수신 동작의 블로킹 호출 제한 시간을 설정한다. 윈도에선 밀리초 단위이다. 이 시간이 지나면 수신 호출이 블로킹을 멈추고 리턴해 버린다. |
SO_SNDBUF |
int |
이 소켓이 송신용으로 쓸 버퍼의 크기를 지정한다. 송신 대역폭은 링크 계층에 좌우된다. 프로세스에서 데이터를 링크 계층이 수용할 수 있는 한도 이상으로 보내려 하면 소켓은 나머지 데이터를 일단 송신 버퍼에 넣어둔다. TCP 같은 신뢰성 프로토콜을 사용하는 소켓은 송신한 데이터의 확인응답을 받을 때까지 재전송용으로 패킷을 쌓아두는 데 역시 이 전송 버퍼를 사용한다. 전송 버퍼가 가득 차면, 자리가 날 때까지 send()나 sendto() 호출이 블로킹된다. |
SO_SNDTIMEO |
DWORD/timeval |
송신 동작의 블로킹 호출 제한 시간을 설정한다. 윈도에선 밀리초 단위이다. 이 시간이 지나면 송신 호출이 블로킹을 멈추고 리턴해 버린다. |
SO_KEEPALIVE |
BOOL/int |
TCP같이 연결 지향형 프로토콜에만 유용하다. 이 옵션은 소켓이 주기적으로 연결 유지(keep alive) 패킷을 상대편에 보낼지를 지정한다. 연결 유지 패킷이 확인응답을 받지 못하면 소켓 에러가 발생하여, 다음번 이 소켓으로 데이터를 보내려 시도하면 연결이 끊어졌다고 나온다. 이 옵션은 연결이 끊어졌는지 판단하는 데만 쓰는 것이 아니라, 주기적으로 패킷을 보내는 속성 때문에 연결에 시간제한을 두는 방화벽 또는 NAT 하에서 연결을 유지토록 만드는 데도 도움이 된다. |