Функция обратного вызова LPWSPSTRINGTOADDRESS (ws2spi.h)
Функция WSPStringToAddress преобразует удобочитаемую числовую строку в структуру адреса сокета (sockaddr), подходящую для передачи в подпрограммы Windows Sockets, которые принимают такую структуру. Все отсутствующие компоненты адреса по умолчанию имеют разумное значение, если это возможно. Например, отсутствующий номер порта по умолчанию равен нулю.
Синтаксис
LPWSPSTRINGTOADDRESS Lpwspstringtoaddress;
INT Lpwspstringtoaddress(
[in] LPWSTR AddressString,
[in] INT AddressFamily,
[in] LPWSAPROTOCOL_INFOW lpProtocolInfo,
[out] LPSOCKADDR lpAddress,
[in, out] LPINT lpAddressLength,
[out] LPINT lpErrno
)
{...}
Параметры
[in] AddressString
Указатель на преобразуемую строку с нулевым завершением.
[in] AddressFamily
Семейство адресов, к которому принадлежит строка, или AF_UNSPEC, если она неизвестна.
[in] lpProtocolInfo
(обязательно) Структура WSAProtocol_Info поставщика.
[out] lpAddress
Буфер, заполненный одной структурой sockaddr .
[in, out] lpAddressLength
Длина буфера адресов в байтах. Возвращает размер результирующей структуры sockaddr . Если предоставленный буфер недостаточно велик, функция завершается сбоем с определенной ошибкой WSAEFAULT и этот параметр обновляется с требуемым размером в байтах.
[out] lpErrno
Указатель на код ошибки.
Возвращаемое значение
Если ошибка не возникает, WSPStringToAddress возвращает ноль. В противном случае возвращается значение SOCKET_ERROR, а в lpErrno доступен определенный код ошибки.
Код ошибки | Значение |
---|---|
Указанный буфер адресов слишком мал, передайте буфер большего размера. | |
Не удалось преобразовать строку в sockaddr, поставщику не удалось поддержать указанное семейство адресов, или указанный lpProtocolInfo не ссылается на структуру WSAProtocol_Info , поддерживаемую поставщиком. |
Комментарии
Многоуровневый поставщик служб предоставляет реализацию этой функции, но он также является клиентом этой функции, если и когда он вызывает WSPStringToAddress следующего уровня в цепочке протоколов. Некоторые особые замечания относятся к параметру lpProtocolInfo этой функции, так как он распространяется вниз по уровням цепочки протоколов.
Если следующий слой в цепочке протоколов является другим слоем, то при вызове WSPStringToAddress следующего слоя этот слой должен передать следующему уровню lpProtocolInfo , который ссылается на ту же неизмененную WSAProtocol_Info структуру с теми же неизмененные сведениями о цепочке. Однако если следующим уровнем является базовый протокол (то есть последний элемент в цепочке), этот слой выполняет подстановку при вызове WSPStringToAddress базового поставщика. В этом случае на структуру WSAPROTOCOL_INFO базового поставщика следует ссылаться с помощью параметра lpProtocolInfo .
Одним из важнейших преимуществ этой политики является то, что поставщики базовых служб не должны знать о цепочках протоколов.
Эта же политика распространения применяется при распространении WSAProtocol_Info структуры через многоуровневую последовательность других функций, таких как LPWSPAddressToString, LPWSPDuplicateSocket, WSPStartup или LPWSPSocket.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | ws2spi.h |