다음을 통해 공유


SIO_TCP_INFO 제어 코드

설명

SIO_TCP_INFO 제어 코드는 지정된 소켓에 대한 TCP(Transmission Control Protocol) 통계를 검색합니다.

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

int WSAIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_TCP_INFO,                // dwIoControlCode
  (LPVOID) lpvInBuffer,   // pointer to a DWORD
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,         // pointer to a TCP_INFO_v0 structure
  (DWORD) cbOutBuffer,       // size of the 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_TCP_INFO,                // dwIoControlCode
  (LPVOID) lpvInBuffer,   // pointer to a DWORD
  (DWORD) cbInBuffer,           // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,         // pointer to a TCP_INFO_v0 structure
  (DWORD) cbOutBuffer,       // size of the 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_TCP_INFO 사용합니다.

lpvInBuffer

입력 버퍼에 대한 포인터입니다. 이 매개 변수에는 사용 중인 SIO_TCP_INFO 제어 코드의 버전을 지정하는 DWORD에 대한 포인터가 포함되어 있습니다. TCP_INFO_v0 사용할 0을 지정합니다. 더 많은 필드를 제공하는 TCP_INFO_v1 사용하도록 1을 지정합니다.

cbInBuffer

입력 버퍼의 크기(바이트)입니다. 이 매개 변수는 DWORD 데이터 형식의 크기여야 합니다.

lpvOutBuffer

출력 버퍼에 대한 포인터입니다. 성공적인 출력에서 이 매개 변수는 지정된 소켓에 대한 TCP 통계를 포함하는 TCP_INFO_v0 구조체에 대한 포인터를 포함합니다.

cbOutBuffer

출력 버퍼의 크기(바이트)입니다. 이 매개 변수는 TCP_INFO_v0 구조체의 크기 이상이어야 합니다.

lpcbBytesReturned

출력 버퍼에 저장된 데이터의 크기(바이트)를 수신하는 변수에 대한 포인터입니다.

출력 버퍼가 너무 작으면 호출이 실패하고 WSAGetLastErrorWSAEINVAL을 반환하고 lpcbBytesReturned 매개 변수가 DWORD 값 0을 가리킵니다.

lpOverlappedNULL이면 성공적인 호출에서 반환되는 lpcbBytesReturned 매개 변수가 가리키는 DWORD 값은 0일 수 없습니다.

lpOverlapped 매개 변수가 겹치는 소켓에 대해 NULL이 아닌 경우 즉시 완료할 수 없는 작업이 시작되고 나중에 완료가 표시됩니다. 겹치는 작업이 완료될 때까지 저장된 데이터의 크기를 확인할 수 없으므로 반환되는 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를 호출합니다.

오류 코드 의미
WSAEMSGSIZE 입력 버퍼에 대한 포인터가 NULL이거나 입력 버퍼의 지정된 크기가 올바르지 않습니다.
WSAEINVAL 잘못된 인수가 지정되었습니다. 이 오류는 dwIoControlCode 매개 변수가 유효한 명령이 아니거나 지정된 입력 매개 변수가 허용되지 않거나 명령이 지정된 소켓 형식에 적용되지 않는 경우 반환됩니다.

설명

GetPerTcpConnectionEStats 함수를 사용하여 TCP 통계를 검색하는 것과 달리 이 제어 코드로 TCP 통계를 검색할 때는 사용자 코드가 TCP 연결 테이블을 로드, 저장 및 필터링할 필요가 없으며, 사용할 관리자 권한도 필요하지 않습니다.

추가 정보

socket

TCP_INFO_v0

GetPerTcpConnectionEStats

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW