SO_KEEPALIVE 소켓 옵션

SO_KEEPALIVE 소켓 옵션은 애플리케이션이 소켓 연결에 대해 연결 유지 패킷을 사용하도록 설정하도록 설계되었습니다.

이 소켓 옵션의 상태 쿼리하려면 getsockopt 함수를 호출합니다. 이 옵션을 설정하려면 다음 매개 변수를 사용하여 setsockopt 함수를 호출합니다.

소켓 옵션 값

이 소켓 옵션을 나타내는 상수는 0x0008.

구문

int setsockopt(
  (SOCKET) s,      // descriptor identifying a socket 
  (int) SOL_SOCKET,   // level
  (int) SO_KEEPALIVE, // optname
  (char *) optval, // input buffer,
  (int) optlen  // size of input buffer
);

매개 변수

s [in]

소켓을 식별하는 설명자입니다.

level [in]

옵션이 정의된 수준입니다. 이 작업에 는 SOL_SOCKET 사용합니다.

optname [in]

값을 설정할 소켓 옵션입니다. 이 작업에 는 SO_KEEPALIVE 사용합니다.

optval [out]

설정할 옵션의 값을 포함하는 버퍼에 대한 포인터입니다. 이 매개 변수는 DWORD 값의 크기보다 크거나 같은 버퍼를 가리킵니다.

이 값은 FALSE (사용 안 함)를 나타내는 데 사용되는 0과 TRUE (사용)를 나타내는 0이 아닌 값이 있는 부울 값으로 처리됩니다.

optlen [in]

옵트발 버퍼의 크기(바이트)입니다. 이 크기는 DWORD 값의 크기와 같거나 커야 합니다.

반환 값

작업이 성공적으로 완료되면 setsockopt 는 0을 반환합니다.

작업이 실패하면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 코드를 검색할 수 있습니다.

오류 코드 의미
WSANOTINITIALISED
이 함수를 사용하기 전에 성공적인 WSAStartup 호출이 발생해야 합니다.
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEFAULT
optval 또는 optlen 매개 변수 중 하나는 사용자 주소 공간의 유효한 부분에 없는 메모리를 가리킵니다. optlen 매개 변수가 가리키는 값이 DWORD 값의 크기보다 작은 경우에도 이 오류가 반환됩니다.
WSAEINPROGRESS
차단 Windows Sockets 1.1 호출이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다.
WSAEINVAL
수준 매개 변수를 알 수 없거나 잘못되었습니다. Windows Vista 이상에서는 소켓이 전환 상태인 경우에도 이 오류가 반환됩니다.
WSAENOPROTOOPT
옵션은 표시된 프로토콜 패밀리에서 알 수 없거나 지원되지 않습니다. 이 오류는 s 매개 변수에 전달된 소켓 설명자가 데이터그램 소켓에 대한 경우 반환됩니다.
WSAENOTSOCK
설명자가 소켓이 아닙니다.

 

설명

SO_KEEPALIVE 소켓 옵션을 사용하여 호출된 getsockopt 함수를 사용하면 일반적으로 사용되지 않는 기능이지만 애플리케이션이 keepalive 옵션의 현재 상태를 검색할 수 있습니다. 애플리케이션이 소켓에서 유지 패킷을 사용하도록 설정해야 하는 경우 setsockopt 함수를 호출하여 옵션을 사용하도록 설정합니다.

SO_KEEPALIVE 소켓 옵션을 사용하여 호출된 setsockopt 함수를 사용하면 애플리케이션이 소켓 연결에 대해 연결 유지 패킷을 사용하도록 설정할 수 있습니다. 소켓에 대한 SO_KEEPALIVE 옵션은 기본적으로 사용하지 않도록 설정됩니다( FALSE로 설정).

이 소켓 옵션을 사용하도록 설정하면 TCP 스택은 간격 내에 연결에 대한 데이터 또는 승인 패킷이 수신되지 않은 경우 연결 유지 패킷을 보냅니다. 연결 유지 옵션에 대한 자세한 내용은 IETF 웹 사이트에서 사용할 수 있는 RFC 1122에 지정된 통신 계층인 인터넷 호스트 요구 사항에 대한 섹션 4.2.3.6을 참조하세요. (이 리소스는 영어로만 사용할 수 있습니다.)

SO_KEEPALIVE 소켓 옵션은 연결 유지(연결 지향 프로토콜)의 개념을 지원하는 프로토콜에만 유효합니다. TCP의 경우 기본 연결 유지 시간 제한은 2시간이고 연결 유지 간격은 1초입니다. 기본 연결 유지 프로브 수는 Windows 버전에 따라 달라집니다.

SIO_KEEPALIVE_VALS 제어 코드를 사용하여 연결 유지를 사용하거나 사용하지 않도록 설정하고 단일 연결에 대한 시간 제한 및 간격을 조정할 수 있습니다. SO_KEEPALIVE 사용하여 keep-alive를 사용하도록 설정한 경우 SIO_KEEPALIVE_VALS사용하여 이러한 값을 변경하지 않는 한 기본 TCP 설정은 유지 시간 제한 및 간격에 사용됩니다.

Keep-alive 시간 제한의 기본 시스템 전체 값은 값을 밀리초 단위로 사용하는 KeepAliveTime 레지스트리 설정을 통해 제어할 수 있습니다. keep-alive 간격의 기본 시스템 전체 값은 값을 밀리초 단위로 사용하는 KeepAliveInterval 레지스트리 설정을 통해 제어할 수 있습니다.

Windows Vista 이상에서는 연결 유지 프로브(데이터 재전송)의 수가 10으로 설정되며 변경할 수 없습니다.

Windows Server 2003, Windows XP 및 Windows 2000에서 유지 프로브 수에 대한 기본 설정은 5입니다. TcpMaxDataRetransmissions 및 PPTPTcpMaxDataRetransmissions 레지스트리 설정을 통해 연결 유지 프로브 수를 제어할 수 있습니다. keep-alive 프로브 수는 두 레지스트리 키 값 중 더 큰 값으로 설정됩니다. 이 숫자가 0이면 연결 유지 프로브가 전송되지 않습니다. 이 숫자가 255를 초과하면 255로 조정됩니다.

Windows Vista 이상에서는 소켓이 전환 상태가 아닌 잘 알려진 상태인 경우에만 setsockopt 함수를 사용하여 SO_KEEPALIVE 소켓 옵션을 설정할 수 있습니다. TCP의 경우 연결 함수(connect, ConnectEx, WSAConnect, WSAConnectByList 또는 WSAConnectByName)가 호출되기 전에 또는 연결 요청이 실제로 완료된 후 SO_KEEPALIVE 소켓 옵션을 설정해야 합니다. connect 함수가 비동기적으로 호출된 경우 SO_KEEPALIVE 소켓 옵션을 설정하기 전에 연결 완료를 기다려야 합니다. 연결 요청이 아직 처리 중일 때 애플리케이션이 SO_KEEPALIVE 소켓 옵션을 설정하려고 하면 setsockopt 함수가 실패하고 WSAEINVAL이 반환됩니다.

Windows Server 2003, Windows XP 및 Windows 2000에서는 켓이 전환 상태(연결 요청이 아직 진행 중임)와 잘 알려진 상태일 때 setsockopt 함수를 사용하여 SO_KEEPALIVE 소켓 옵션을 설정할 수 있습니다.

Ws2def.h 헤더 파일은 Winsock2.h에 자동으로 포함되며 직접 사용하면 안 됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Ws2def.h(Winsock2.h 포함)

참고 항목

getsockopt

setsockopt

KeepAliveTime

KeepAliveInterval

PPTPTcpMaxDataRetransmissions

소켓

SIO_KEEPALIVE_VALS

TcpMaxDataRetransmissions

WSAGetLastError