código de control de SIO_TCP_INFO
Descripción
El código de control SIO_TCP_INFO recupera las estadísticas del Protocolo de control de transmisión (TCP) para un socket especificado.
Para realizar esta operación, llame a la función WSAIoctl o WSPIoctl con los parámetros siguientes.
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.
);
Parámetros
s
Descriptor que identifica un socket.
dwIoControlCode
Código de control de la operación. Use SIO_TCP_INFO para esta operación.
lpvInBuffer
Puntero al búfer de entrada. Este parámetro contiene un puntero a un DWORD que especifica la versión del código de control de SIO_TCP_INFO que está usando. Especifique 0 para usar TCP_INFO_v0. Especifique 1 para usar TCP_INFO_v1, que proporciona más campos.
cbInBuffer
Tamaño, en bytes, del búfer de entrada. Este parámetro debe ser el tamaño del tipo de datos DWORD .
lpvOutBuffer
Puntero al búfer de salida. En la salida correcta, este parámetro contiene un puntero a una estructura de TCP_INFO_v0 que contiene las estadísticas TCP para el socket especificado.
cbOutBuffer
Tamaño, en bytes, del búfer de salida. Este parámetro debe ser al menos el tamaño de la estructura TCP_INFO_v0 .
lpcbBytesReturned
Puntero a una variable que recibe el tamaño, en bytes, de los datos almacenados en el búfer de salida.
Si el búfer de salida es demasiado pequeño, se produce un error en la llamada, WSAGetLastError devuelve WSAEINVAL y el parámetro lpcbBytesReturned apunta a un valor DWORD de cero.
Si lpOverlapped es NULL, el valor DWORD al que apunta el parámetro lpcbBytesReturned devuelto en una llamada correcta no puede ser cero.
Si el parámetro lpOverlapped no es NULL para sockets superpuestos, las operaciones que no se pueden completar inmediatamente se iniciarán y la finalización se indicará en un momento posterior. El valor DWORD al que apunta el parámetro lpcbBytesReturned que se devuelve puede ser cero, ya que el tamaño de los datos almacenados no se puede determinar hasta que se haya completado la operación superpuesta. El estado de finalización final se puede recuperar cuando se señala el método de finalización adecuado cuando se ha completado la operación.
lpvOverlapped
Puntero a una estructura WSAOVERLAPPED .
Si el socket s se creó sin el atributo superpuesto, se omite el parámetro lpOverlapped .
Si se abrió s con el atributo superpuesto y el parámetro lpOverlapped no es NULL, la operación se realiza como una operación superpuesta (asincrónica). En este caso, el parámetro lpOverlapped debe apuntar a una estructura WSAOVERLAPPED válida.
Para las operaciones superpuestas, la función WSAIoctl o WSPIoctl devuelve inmediatamente y el método de finalización adecuado se señala cuando se ha completado la operación. De lo contrario, la función no devuelve hasta que se haya completado la operación o se produzca un error.
lpCompletionRoutine
Tipo: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
Puntero a la rutina de finalización a la que se llama cuando se ha completado la operación (se omite para sockets no superpuestos).
lpThreadId
Puntero a una estructura WSATHREADID que usará el proveedor en una llamada posterior a WPUQueueApc. El proveedor debe almacenar la estructura WSATHREADID a la que se hace referencia (no el puntero a la misma) hasta después de que la función WPUQueueApc devuelva.
Nota Este parámetro solo se aplica a la función WSPIoctl .
lpErrno
Puntero al código de error.
Nota Este parámetro solo se aplica a la función WSPIoctl .
Valor devuelto
Si la operación se completa correctamente, la función WSAIoctl o WSPIoctl devuelve cero.
Si se produce un error en la operación o está pendiente, la función WSAIoctl o WSPIoctl devuelve SOCKET_ERROR. Para obtener información de error extendida, llame a WSAGetLastError.
Código de error | Significado |
---|---|
WSAEMSGSIZE | El puntero al búfer de entrada era NULL o el tamaño especificado del búfer de entrada no era correcto. |
WSAEINVAL | Se proporcionó un argumento no válido. Este error se devuelve si el parámetro dwIoControlCode no es un comando válido o un parámetro de entrada especificado no es aceptable o el comando no es aplicable al tipo de socket especificado. |
Comentarios
A diferencia de la recuperación de estadísticas TCP con la función GetPerTcpConnectionEStats , la recuperación de estadísticas TCP con este código de control no requiere que el código de usuario cargue, almacene y filtre la tabla de conexiones TCP y no requiera privilegios elevados para su uso.