Таблица 7.4. Основные операторы winsock
Имя оператора |
Назначение |
WSAAsyncGetHostByAddr |
Аналог оператора gethostbyaddr |
WSAAsyncGetHostByAddr |
Аналог оператора gethostbyaddr |
WSAAsyncGetHostByName |
Аналог оператора gethostbyname |
WSAAsyncGetProtoByName |
Аналог оператора getprotobyname |
WSAAsyncGetProtoByNumber |
Аналог оператора getprotobynumber |
WSAAsyncGetServByName |
Аналог оператора getservbyname |
WSAAsyncGetServByPort |
Аналог оператора getservbyport |
WSAAsyncSelect |
Функциональный аналог оператора select |
WSACancelAsyncRequest |
Прерывает выполнение операторов типа WSAAsyncget*by* |
WSACancelBlockingCall |
Прерывает выполнение блокирующего оператора приложения (API) |
WSACleanup |
Сообщает Windows sockets о завершении работы программы с DLL |
WSAGetLastError |
Выдает сообщение о последней ошибке |
WSAIsBlocking |
Определяет, является ли Winsock DLL блокирующей |
WSASetBlockingHook |
Устанавливает перехват блокирующего вызова |
WSASet LastError |
Фиксирует тип ошибки для последующего вызова WSALastError |
WSAStartup |
Инициализирует следующий уровень Winsock |
WSAUNhookBlockingHook |
Восстанавливает прежнюю блокировку. |
Из этого списка можно выделить две программы WSAStartup и WSACleanup, первая вызывается в начале любой процедуры, вторая - ее завершает. wsastartup может вызываться за время сессии несколько раз, она позволяет указать версию winsock или получить информацию об ее конкретной реализации. При вызове WSAStartup осуществляется диалог с динамической библиотекой WINSOCK.DLL и настройка параметров системы. При аварийном завершении программы нужно корректно окончить работу с WINSOCK.DLL. Следует при этом помнить, что WSACleanup воздействует на все потоки завершаемого процесса (например, в случае Windows 95 или NS). Определенные проблемы может вызвать перенос программ из Unix в Windows, так как там вместо read и write используются операторы recv и send, вместо ioctl - ioctlsocket, а вместо close - closesocket. Некоторые операторы вообще непереносимы: readv, writv, recvmsg и sendmsg и части программы, где они содержатся, необходимо переписать. При обнаружении ошибки Unix присваивает переменной errno соответствующее значение. В winsock для этой цели используется символьная константа SOCKET_ERROR (равная -1), а для уточнения типа ошибки следует вызвать WSAGetLastError. В системах Windows 95 или NT этот оператор обращается к программе Win32 GetLastError, которая возвращает значение ошибки для сессии, вызвавшей эту ошибку.