더북(TheBook)

표 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 하에서 연결을 유지토록 만드는 데도 도움이 된다.

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