11.2. TCP_CORK 소켓 옵션
TCP_CORK 옵션은 소켓의 모든 데이터 패킷을 수집하고 버퍼가 지정된 제한으로 채워질 때까지 전송하지 않습니다. 이를 통해 애플리케이션은 커널 공간에 패킷을 빌드하고 TCP_CORK 가 비활성화되면 데이터를 보낼 수 있습니다. TCP_CORK 는 setsocketopt() 함수를 사용하여 소켓 파일 설명자에 설정됩니다. 프로그램을 개발할 때 파일에서 대량 데이터를 보내야하는 경우 sendfile() 함수와 함께 TCP_CORK 를 사용하는 것이 좋습니다.
논리 패킷이 다양한 구성 요소에서 커널에 빌드되면 setsockopt 소켓 API를 사용하여 1 값으로 구성하여 TCP_CORK 를 활성화합니다. 이를 "corking the socket"이라고 합니다. TCP_CORK 는 코크가 적절한 시간에 제거되지 않는 경우 버그가 발생할 수 있습니다.
다음 예제에서는 setsockopt 소켓 API를 통해 TCP_CORK 를 활성화하는 방법을 보여줍니다.
int one = 1;
setsockopt(descriptor, SOL_TCP, TCP_CORK, &one, sizeof(one));
일부 환경에서는 커널이 코크를 제거할 시기를 확인할 수 없는 경우 다음과 같이 수동으로 제거할 수 있습니다.
int zero = 0;
setsockopt(descriptor, SOL_TCP, TCP_CORK, &zero, sizeof(zero));
자세한 내용은 시스템의 sendfile(2) 매뉴얼 페이지를 참조하십시오.