Коды операций
Таблица 7.9. Коды операций
Код операции |
Input Type |
Output Type |
Значение |
SIO_ASSOCIATE_HANDLE |
зависит от API |
не использ. |
Связывает соединитель с заданным дескриптором интерфейса-партнера. |
SIO_ENABLE_CIRCULAR_QUEUEING |
не использ. |
не использ. |
Разрешает организацию кольцевой очереди. |
SIO_FIND_ROUTE |
struct sockaddr |
не использ. |
Запрос маршрута до заданного адреса. |
SIO_FLUSH |
не использ. |
не использ. |
Аннулирует текущее содержимое очереди на отправку. |
SIO_GET_BROADCAST_ADDRESS |
не использ. |
struct sockaddr |
Определяет протокольно-зависимый широковещательный адрес для использования в sendto/WSASendTo |
SIO_GET_QOS |
не использ. |
QOS |
Определяет текущую спецификацию соединителя. |
SIO_GET_GROUP_QOS |
не использ. |
QOS |
Определяет спецификацию группы, к которой принадлежит соединитель |
SIO_MULTIPOINT_LOOKBACK |
BOOL |
не использ. |
Определяет, будут ли данные, посланные в ходе многоточечной сессии, получены соединителем локальной ЭВМ. |
SIO_MULTICAST_SCOPE |
int |
не использ. |
Определяет режим, в котором будут осуществляться мультикастинг-обмены. |
SIO_SET_QOS |
QOS |
не использ. |
Устанавливает новую спецификацию для соединителя. |
SIO_SET_GROUP_QOS |
QOS |
не использ. |
Устанавливает новую спецификацию группы, к которой принадлежит соединитель. |
SIO_TRANSLATE_HANDLE |
int |
зависит от API |
Возвращает дескриптор для соединителя s, который соответствует контексту интерфейса-партнера. |
Оператор WSAAccept устанавливает условное соединение и имеет следующую структуру параметров.
WSAAccept (
IN |
SOCKET |
s, |
OUT |
struct sockaddr FAR |
addr, |
IN OUT |
LPINT |
addrlen, |
IN |
LPCONDITIONPROC |
lpfnCondition, |
IN |
DWORD |
dwCallbackData |
);
s |
дескриптор соединителя, который находится в режиме listen. |
addr |
опционный указатель на буфер (структуру), где должен храниться адрес подключаемого объекта, формат адреса определяется типом протокола, заданным при создании соединителя. |
addrlen |
Опционный указатель на целую переменную, которая определяет длину аргумента addr. |
lpfnCondition |
Адрес опционной условной процедуры, которая на основе полученной информации, создает группу или подключает соединитель к уже существующей группе. |
dwCallbackData |
Параметр, возвращаемый приложению. Этот параметр не интерпретируется WinSock. |
<
IN и OUT указывают на то, является ли данный параметр входным или выходные.
Программа извлекает очередную заявку на соединение из очереди соединителя s и проверяет с помощью специфицированной программы выполнение условий соединения. Если условия выполнены, возвращается флаг CF_ACCEPT, программа создает новый соединитель и осуществляет подключение его к группе в соответствии с параметром g, выработанным программой проверки условий. Вновь созданный соединитель имеет те же параметры, что и s, включая те, что задаются операторами контроля WSAAsyncSelect или WSAEventSelect. Если программа проверки условия вернула флаг CF_REJECT, запрос на соединение аннулируется. При невозможности принять решение немедленно, программа проверки условия должна вернуть флаг CF_DEFER, при этом никаких действий не предпринимается. Когда приложение будет готово обслужить запрос на соединение, оно снова запустит процедуру WSAAccept и пришлет либо CF_ACCEPT, либо CF_REJECT в качестве результата проверки условий.
Для соединителей, которые остаются в блокирующем режиме, когда в очереди нет запросов на соединение, WSAAccept блокирует вызывающую программу до появления заявки на соединение. Для соединителей неблокирующего типа, когда очередь пуста, оператор WSAAccept вернет флаг ошибки.
При завершении процедуры в addrlen будет записана реальная длина адреса в байтах. Если addr и (или) addrlen равны нулю, это означает, что нет никакой информации об адресе удаленного адресата. В противном случае эти параметры несут в себе реальную информацию не зависимо от результатов проверки условий. Прототип программы проверки условий имеет формат:
int CALLBACK
ConditionFunc(
IN |
LPWSABUF |
lpCallerId, |
IN |
LPWSABUF |
lpCallerData, |
IN OUT |
LPQOS |
lpSQOS, |
IN OUT |
LPQOS |
lpGQOS, |
IN |
LPWSABUF |
lpCalleeId, |
OUT |
LPWSABUF |
lpCalleeData, |
OUT |
GROUP FAR * |
g |
IN |
DWORD |
dwCallbackData |
);
ConditionFunc представляет собой указатель имени программы, которая служит для проверки условий. В 16-битной версии Windows, эта программа выполняется в рамках той же сессии, что и WSAAccept, поэтому вызов каких-либо иных WinSock операторов кроме WSAIsBlocking и WSACancelBlockingCall не возможен.
Программа проверки условий должна находиться в DLL или прикладном модуле. Для определения адреса программы проверки условий следует пользоваться оператором MakeProcInstance.
Переменные lpCallerId и lpCallerData являются параметрами, которые содержат адрес партнера и любую пользовательскую информацию, которая была прислана вместе с запросом на соединение.
lpSQOS представляет собой указатель на текущую спецификацию QOS соединителя s (по одной для каждого из концов виртуального канала), за которой следуют дополнительные параметры, заданные провайдером. Нулевое значение lpSQOS указывает на то, что вызывающая сторона не задала значения QOS.
lpGQOS - указатель на спецификацию QOS группы соединителей, созданной запрашивающей стороной (для каждого из направлений обмена), за которой следуют дополнительные параметры, заданные провайдером.
lpCalleeId представляет собой локальный адрес вызывающей стороны.
lpCalleeData используется программой проверки условий для записи результатов ее работы.
lpCalleeData первоначально содержит размер буфера, предназначенного для сервис провайдера. Положение буфера определяется указателем lpCalleeData->buf. Программа проверки условий должна скопировать lpCalleeData->len байт в lpCalleeData->buf, а затем провести актуализацию lpCalleeData->len, с тем чтобы сообщить действительное число переданных байтов.
В таблице 7.10 представлен перечень кодов-сообщений об ошибках вместе с их эквивалентами для Berkley-соединителей.
Содержание раздела