Код элемента управления SIO_TCP_INFO
Описание
Код элемента управления SIO_TCP_INFO извлекает статистику tcp для указанного сокета.
Для выполнения этой операции вызовите функцию 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.
);
Параметры
s
Дескриптор, идентифицирующий сокет.
dwIoControlCode
Код элемента управления для операции. Используйте SIO_TCP_INFO для этой операции.
lpvInBuffer
Указатель на входной буфер. Этот параметр содержит указатель на DWORD , указывающий версию используемого кода элемента управления SIO_TCP_INFO . Укажите значение 0 для использования TCP_INFO_v0. Укажите значение 1, чтобы использовать TCP_INFO_v1, которая предоставляет дополнительные поля.
cbInBuffer
Размер входного буфера (в байтах). Этот параметр должен иметь размер типа данных DWORD .
lpvOutBuffer
Указатель на выходной буфер. При успешном выводе этот параметр содержит указатель на структуру TCP_INFO_v0 , содержащую статистику TCP для указанного сокета.
cbOutBuffer
Размер выходного буфера (в байтах). Этот параметр должен быть не ниже размера структуры TCP_INFO_v0 .
lpcbBytesReturned
Указатель на переменную, которая получает размер данных в байтах, хранящихся в выходном буфере.
Если выходной буфер слишком мал, вызов завершается ошибкой, WSAGetLastError возвращает WSAEINVAL, а параметр lpcbBytesReturned указывает на значение DWORD , равное нулю.
Если lpOverlapped имеет значение NULL, значение DWORD , на которое указывает параметр lpcbBytesReturned , возвращаемое при успешном вызове, не может быть равным нулю.
Если параметр lpOverlapped не имеет значения NULL для перекрывающихся сокетов, операции, которые не могут быть завершены немедленно, будут инициированы, а завершение будет указано позже. Значение DWORD , на которое указывает возвращаемый параметр lpcbBytesReturned , может быть равным нулю, так как размер хранимых данных не может быть определен до завершения перекрывающейся операции. Окончательное состояние завершения можно получить, когда соответствующий метод завершения получает сигнал о завершении операции.
lpvOverlapped
Указатель на структуру WSAOVERLAPPED .
Если сокеты были созданы без перекрывающихся атрибутов, параметр lpOverlapped игнорируется.
Если объект был открыт с перекрывающимся атрибутом, а параметр lpOverlapped не имеет значения NULL, операция выполняется как перекрываемая (асинхронная) операция. В этом случае параметр lpOverlapped должен указывать на допустимую структуру WSAOVERLAPPED .
Для перекрывающихся операций функция WSAIoctl или WSPIoctl возвращается немедленно, а соответствующий метод завершения получает сигнал о завершении операции. В противном случае функция не возвращается, пока операция не будет завершена или не возникнет ошибка.
lpCompletionRoutine
Тип: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
Указатель на подпрограмму завершения, вызываемую при завершении операции (игнорируется для неперекрывающихся сокетов).
lpThreadId
Указатель на структуру WSATHREADID , которая будет использоваться поставщиком при последующем вызове WPUQueueApc. Поставщик должен хранить указанную структуру WSATHREADID (а не указатель на нее) до тех пор, пока не будет возвращена функция WPUQueueApc .
Примечание Этот параметр применяется только к функции WSPIoctl .
lpErrno
Указатель на код ошибки.
Примечание Этот параметр применяется только к функции WSPIoctl .
Возвращаемое значение
Если операция завершается успешно, функция WSAIoctl или WSPIoctl возвращает ноль.
Если операция завершается сбоем или находится в состоянии ожидания, функция WSAIoctl или WSPIoctl возвращает SOCKET_ERROR. Чтобы получить расширенные сведения об ошибке, вызовите WSAGetLastError.
Код ошибки | Значение |
---|---|
WSAEMSGSIZE | Указатель на входной буфер имеет значение NULL, или указанный размер входного буфера был неправильным. |
WSAEINVAL | Указан недопустимый аргумент. Эта ошибка возвращается, если параметр dwIoControlCode не является допустимой командой, если указанный входной параметр недопустим или команда не применима к указанному типу сокета. |
Комментарии
В отличие от получения статистики TCP с помощью функции GetPerTcpConnectionEStats , для получения статистики TCP с помощью этого кода управления не требуется загрузка, хранение и фильтрация таблицы подключений TCP с повышенными привилегиями.