다음을 통해 공유


SIO_KEEPALIVE_VALS 제어 코드

설명

SIO_KEEPALIVE_VALS 제어 코드는 TCP 연결 유지 시간 제한 및 간격을 지정하는 TCP 연결 유지 옵션의 연결별 설정을 사용하거나 사용하지 않도록 설정합니다.

이 작업을 수행하려면 다음 매개 변수를 사용하여 WSAIoctl 또는 WSPIoctl 함수를 호출합니다.

int WSAIoctl(
  (socket) s,              // descriptor identifying a socket
  SIO_KEEPALIVE_VALS,                  // dwIoControlCode
  (LPVOID) lpvInBuffer,    // pointer to tcp_keepalive struct
  (DWORD) cbInBuffer,      // length of input buffer
  NULL,         // output buffer
  0,       // size of output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
);
int WSPIoctl(
  (socket) s,              // descriptor identifying a socket
  SIO_KEEPALIVE_VALS,                  // dwIoControlCode
  (LPVOID) lpvInBuffer,    // pointer to tcp_keepalive struct
  (DWORD) cbInBuffer,      // length of input buffer
  NULL,         // output buffer
  0,       // size of output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
  (LPWSATHREADID) lpThreadId,   // a WSATHREADID structure
  (LPINT) lpErrno   // a pointer to the error code.
);

매개 변수

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

dwIoControlCode

작업을 위한 제어 코드입니다. 이 작업에 는 SIO_KEEPALIVE_VALS 사용합니다.

lpvInBuffer

입력 버퍼에 대한 포인터입니다. 이 매개 변수는 tcp_keepalive 구조를 가리킵니다.

cbInBuffer

입력 버퍼의 크기(바이트)입니다. 이 매개 변수는 lpvInBuffer 매개 변수가 가리키는 tcp_keepalive 구조체의 크기와 같거나 커야 합니다.

lpvOutBuffer

출력 버퍼에 대한 포인터입니다. 이 매개 변수는 이 작업에 사용되지 않습니다.

cbOutBuffer

출력 버퍼의 크기(바이트)입니다. 이 매개 변수는 0으로 설정해야 합니다.

lpcbBytesReturned

출력 버퍼에 저장된 데이터의 크기(바이트)를 수신하는 변수에 대한 포인터입니다. 이 반환된 매개 변수는 출력이 없으므로 이 작업에 대한 DWORD 값 0을 가리킵니다.

lpvOverlapped

WSAOVERLAPPED 구조체에 대한 포인터입니다.

소켓 겹치는 특성 없이 만들어진 경우 lpOverlapped 매개 변수는 무시됩니다.

겹치는 특성으로 열렸고 lpOverlapped 매개 변수가 NULL이 아닌 경우 작업은 겹치는(비동기) 작업으로 수행됩니다. 이 경우 lpOverlapped 매개 변수는 유효한 WSAOVERLAPPED 구조를 가리킵니다.

겹치는 작업의 경우 WSAIoctl 또는 WSPIoctl 함수는 즉시 반환되고 작업이 완료되면 적절한 완료 메서드가 신호를 보냅니다. 그렇지 않으면 작업이 완료되거나 오류가 발생할 때까지 함수가 반환되지 않습니다.

lpCompletionRoutine

형식: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

작업이 완료되었을 때 호출되는 완료 루틴에 대한 포인터입니다(겹치지 않는 소켓의 경우 무시됨).

lpThreadId

WPUQueueApc에 대한 후속 호출에서 공급자가 사용할 WSATHREADID 구조체에 대한 포인터입니다. 공급자는 WPUQueueApc 함수가 반환될 때까지 참조된 WSATHREADID 구조체(동일한 포인터가 아님)를 저장해야 합니다.

참고 이 매개 변수는 WSPIoctl 함수에 만 적용됩니다.

lpErrno

오류 코드에 대한 포인터입니다.

참고 이 매개 변수는 WSPIoctl 함수에 만 적용됩니다.

반환 값

작업이 성공적으로 완료되면 WSAIoctl 또는 WSPIoctl 함수는 0을 반환합니다.

작업이 실패하거나 보류 중인 경우 WSAIoctl 또는 WSPIoctl 함수는 SOCKET_ERROR 반환합니다. 확장된 오류 정보를 얻으려면 WSAGetLastError를 호출합니다.

오류 코드 의미
WSA_IO_PENDING 겹치는 작업이 성공적으로 시작되었으며 나중에 완료가 표시됩니다.
WSA_OPERATION_ABORTED 소켓의 닫기 또는 SIO_FLUSH IOCTL 명령 실행으로 인해 겹치는 작업이 취소되었습니다.
WSAEFAULT lpOverlapped 또는 lpCompletionRoutine 매개 변수는 사용자 주소 공간의 유효한 부분에 완전히 포함되지 않습니다.
WSAEINPROGRESS 콜백이 진행 중일 때 함수가 호출됩니다.
WSAEINTR 차단 작업이 중단되었습니다.
WSAEINVAL dwIoControlCode 매개 변수가 유효한 명령이 아니거나 지정된 입력 매개 변수를 사용할 수 없거나 지정된 소켓 유형에 명령을 적용할 수 없습니다.
WSAENETDOWN 네트워크 하위 시스템이 실패했습니다.
WSAENOPROTOOPT 소켓 옵션은 지정된 프로토콜에서 지원되지 않습니다. 이 오류는 데이터그램 소켓에 대해 반환됩니다.
WSAENOTSOCK 설명자 가 소켓이 아닙니다.
WSAEOPNOTSUPP 지정된 IOCTL 명령은 지원되지 않습니다. 이 오류는 SIO_KEEPALIVE_VALS IOCTL이 전송 공급자에서 지원되지 않는 경우 반환됩니다.

설명

SIO_KEEPALIVE_VALS IOCTL은 Windows 2000 이상 버전의 운영 체제에서 지원됩니다.

SIO_KEEPALIVE_VALS 제어 코드는 TCP 연결 유지 패킷에 사용되는 TCP 연결 유지 시간 제한 및 간격을 지정하는 TCP 연결 유지 옵션의 연결별 설정을 사용하거나 사용하지 않도록 설정합니다. 연결 유지 옵션에 대한 자세한 내용은 IETF 웹 사이트에서 사용할 수 있는 RFC 1122에 지정된 통신 계층인 인터넷 호스트 요구 사항에 대한 섹션 4.2.3.6을 참조하세요. (이 리소스는 영어로만 사용할 수 있습니다.)

lpvInBuffer 매개 변수는 Mstcpip.h 헤더 파일에 정의된 tcp_keepalive 구조를 가리킵니다. 이 구조체는 다음과 같이 정의됩니다.

/* Argument structure for SIO_KEEPALIVE_VALS */
struct tcp_keepalive {
    u_long  onoff;
    u_long  keepalivetime;
    u_long  keepaliveinterval;
};

온오프 멤버에 지정된 값은 TCP keep-alive가 사용 또는 비활성화되었는지 여부를 결정합니다. onoff 멤버가 0이 아닌 값으로 설정된 경우 TCP keep-alive가 활성화되고 구조체의 다른 멤버가 사용됩니다. keepalivetime 멤버는 첫 번째 keep-alive 패킷이 전송될 때까지 작업 없이 시간 제한을 밀리초 단위로 지정합니다. keepaliveinterval 멤버는 승인이 수신되지 않은 경우 연속된 keep-alive 패킷이 전송되는 간격(밀리초)을 지정합니다.

SOL_SOCKET 소켓 옵션 중 하나인 SO_KEEPALIVE 옵션을 사용하여 연결에서 TCP 연결 유지를 사용하거나 사용하지 않도록 설정하고 이 옵션의 현재 상태를 쿼리할 수도 있습니다. 소켓에서 TCP keep-alive를 사용할 수 있는지 여부를 쿼리하기 위해 SO_KEEPALIVE 옵션을 사용하여 getsockopt 함수를 호출할 수 있습니다. TCP 연결 유지를 사용하거나 사용하지 않도록 설정하려면 SO_KEEPALIVE 옵션을 사용하여 setsockopt 함수를 호출할 수 있습니다. SO_KEEPALIVE TCP keep-alive를 사용하도록 설정한 경우 SIO_KEEPALIVE_VALS사용하여 이러한 값을 변경하지 않는 한 기본 TCP 설정은 유지 시간 제한 및 간격에 사용됩니다.

Keep-alive 시간 제한의 기본 시스템 전체 값은 값을 밀리초 단위로 사용하는 KeepAliveTime 레지스트리 설정을 통해 제어할 수 있습니다. 키가 설정되지 않은 경우 기본 연결 유지 시간 제한은 2시간입니다. keep-alive 간격의 기본 시스템 전체 값은 값을 밀리초 단위로 사용하는 KeepAliveInterval 레지스트리 설정을 통해 제어할 수 있습니다. 키가 설정되지 않은 경우 기본 연결 유지 간격은 1초입니다.

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

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

추가 정보

KeepAliveTime

KeepAliveInterval

PPTPTcpMaxDataRetransmissions

socket

SO_KEEPALIVE

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW