Поделиться через


Коды ошибок сокетов Windows

Большинство функций Сокетов Windows 2 не возвращают конкретную причину ошибки при возврате функции. Дополнительные сведения см. в разделе Обработка ошибок Winsock .

Функция WSAGetLastError возвращает последнюю ошибку, которая произошла для вызывающего потока. Если определенная функция Windows Sockets указывает на ошибку, эту функцию следует вызывать немедленно, чтобы получить расширенный код ошибки для вызова функции, завершиющейся сбоем. Эти коды ошибок и краткое текстовое описание, связанное с кодом ошибки, определены в файле заголовка Winerror.h . Функция FormatMessage может использоваться для получения строки сообщения для возвращаемой ошибки.

Сведения об обработке кодов ошибок при переносе приложений сокетов в Winsock см. в статье Коды ошибок — errno, h_errno и WSAGetLastError.

В следующем списке описаны возможные коды ошибок, возвращаемые функцией WSAGetLastError . Ошибки перечислены в числовом порядке с именем макроса ошибки. Некоторые коды ошибок, определенные в файле заголовка Winsock2.h , не возвращаются ни одной функцией.

Возвращаемый код или значение Описание
WSA_INVALID_HANDLE
6
Указанный дескриптор объекта события недопустим.
Приложение пытается использовать объект события, но указанный дескриптор недопустим.
WSA_NOT_ENOUGH_MEMORY
8
Недостаточно доступной памяти.
Приложение использовало функцию Windows Sockets, которая напрямую сопоставляется с функцией Windows. Функция Windows указывает на отсутствие необходимых ресурсов памяти.
WSA_INVALID_PARAMETER
87
Один или несколько параметров недопустимы.
Приложение использовало функцию Windows Sockets, которая напрямую сопоставляется с функцией Windows. Функция Windows указывает на проблему с одним или несколькими параметрами.
WSA_OPERATION_ABORTED
995
Перекрытая операция прервана.
Перекрываемая операция была отменена из-за закрытия сокета или выполнения команды SIO_FLUSH в WSAIoctl.
WSA_IO_INCOMPLETE
996
Перекрываемый объект события ввода-вывода не в состоянии сигнала.
Приложение попыталось определить состояние перекрывающейся операции, которая еще не завершена. Приложения, использующие WSAGetOverlappedResult (с флагом fWait , равным FALSE) в режиме опроса для определения завершения перекрывающейся операции, получают этот код ошибки до завершения операции.
WSA_IO_PENDING
997
Перекрывающиеся операции завершатся позже.
Приложение инициировало перекрывающуюся операцию, которая не может быть закончена немедленно. Указание завершения будет дано позже после завершения операции.
WSAEINTR
10004
Прерванный вызов функции.
Операция блокировки была прервана вызовом WSACancelBlockingCall.
WSAEBADF
10009
Недопустимый дескриптор файла.
Указанный дескриптор файла недопустим.
WSAEACCES
10013
Отказано в разрешении.
Предпринята попытка получить доступ к сокету способом, запрещенным его разрешениями на доступ. Примером является использование адреса широковещательной передачи для sendto без задания разрешения на трансляцию с помощью setsockopt(SO_BROADCAST).
Другая возможная причина ошибки WSAEACCES заключается в том, что при вызове функции bind (на Windows NT 4.0 с пакетом обновления 4 (SP4) и более поздних версий другой драйвер в режиме приложения, службы или ядра привязывается к тому же адресу с монопольным доступом. Такой монопольный доступ — это новая функция Windows NT 4.0 с пакетом обновления 4 (SP4) и более поздних версий, реализованная с помощью SO_EXCLUSIVEADDRUSE.
WSAEFAULT
10014
Неправильный адрес.
Система обнаружила недопустимый адрес указателя при попытке использовать аргумент указателя вызова. Эта ошибка возникает, если приложение передает недопустимое значение указателя или если длина буфера слишком мала. Например, если длина аргумента, являющегося структурой sockaddr , меньше, чем sizeof(sockaddr).
WSAEINVAL
10022
Недопустимый аргумент.
Указан недопустимый аргумент (например, указание недопустимого уровня для функции setsockopt ). В некоторых случаях это также относится к текущему состоянию сокета, например вызов метода accept для сокета, который не прослушивается.
WSAEMFILE
10024
Слишком много открытых файлов.
Слишком много открытых сокетов. Каждая реализация может иметь максимальное количество доступных дескрипторов сокета: глобально, на процесс или на поток.
WSAEWOULDBLOCK
10035
Ресурс временно недоступен.
Эта ошибка возвращается из операций с неблокируемыми сокетами, которые не могут быть завершены немедленно, например recv , если данные не помещается в очередь для чтения из сокета. Это некритичная ошибка, и операция должна быть повторна позже. Обычно WSAEWOULDBLOCK сообщается в результате вызова connect через неблокирующий сокет SOCK_STREAM, так как для установки подключения должно пройти некоторое время.
WSAEINPROGRESS
10036
Операция выполняется.
В данный момент выполняется блокирующая операция. Сокеты Windows позволяют выполнять только одну операцию блокировки (для каждой задачи или потока), и если выполняется какой-либо другой вызов функции (независимо от того, ссылается ли он на этот или любой другой сокет), функция завершается сбоем с ошибкой WSAEINPROGRESS.
WSAEALREADY
10037
Операция уже выполняется.
Предпринята попытка выполнить операцию с неблокируемым сокетом с уже выполняющейся операцией, т. е. вызовом подключения во второй раз в неблокированном сокете, который уже подключается, или отменой асинхронного запроса (WSAsyncGetXbyY), который уже отменен или завершен.
WSAENOTSOCK
10038
Операция сокета в несокете.
Предпринята попытка выполнить операцию с тем, что не является сокетом. Параметр дескриптора сокета не ссылается на допустимый сокет, или для select член fd_set недействителен.
WSAEDESTADDRREQ
10039
Требуется адрес назначения.
Требуемый адрес был пропущен в операции с сокетом. Например, эта ошибка возвращается при вызове метода sendto с удаленным адресом ADDR_ANY.
WSAEMSGSIZE
10040
Сообщение слишком длинное.
Сообщение, отправленное в сокет датаграммы, было больше, чем внутренний буфер сообщений или какое-либо другое ограничение сети, или буфер, используемый для получения датаграммы, был меньше, чем сама датаграмма.
WSAEPROTOTYPE
10041
Неправильный тип протокола для сокета.
В вызове функции сокета указан протокол, который не поддерживает семантику запрошенного типа сокета. Например, протокол ARPA Internet UDP нельзя указать с типом сокета SOCK_STREAM.
WSAENOPROTOOPT
10042
Недопустимый параметр протокола.
Неизвестный, недопустимый или неподдерживаемый параметр или уровень был указан в вызове getsockopt или setsockopt .
WSAEPROTONOSUPPORT
10043
Протокол не поддерживается.
Запрошенный протокол не настроен в системе или для него не существует реализации. Например, вызов сокета запрашивает сокет SOCK_DGRAM, но задает протокол потока.
WSAESOCKTNOSUPPORT
10044
Тип сокета не поддерживается.
Указанный тип сокета не поддерживается в данном семействе адресов. Например, необязательный тип SOCK_RAW может быть выбран в вызове сокета , а реализация не поддерживает SOCK_RAW сокетов.
WSAEOPNOTSUPP
10045
Операция не поддерживается.
Предпринятая операция не поддерживается для типа объекта, на который указывает ссылка. Обычно это происходит, когда дескриптор сокета, который не поддерживает эту операцию, пытается принять подключение к сокету датаграммы.
WSAEPFNOSUPPORT
10046
Семейство протоколов не поддерживается.
Семейство протоколов не настроено в системе или для него не существует реализации. Это сообщение немного отличается от значения WSAEAFNOSUPPORT. Однако в большинстве случаев это взаимозаменяемо, и все функции сокетов Windows, возвращающие одно из этих сообщений, также указывают WSAEAFNOSUPPORT.
WSAEAFNOSUPPORT
10047
Семейство адресов не поддерживается семейством протоколов.
Использовался адрес, несовместимый с запрошенным протоколом. Все сокеты создаются со связанным семейством адресов (т. е. AF_INET для протоколов Интернета) и универсальным типом протокола (т. е. SOCK_STREAM). Эта ошибка возвращается, если в вызове сокета явно запрашивается неправильный протокол или если для сокета используется адрес неправильного семейства, например в sendto.
WSAEADDRINUSE
10048
Адрес уже используется.
Как правило, допускается только одно использование каждого адреса сокета (протокол,IP-адрес/порт). Эта ошибка возникает, если приложение пытается привязать сокет к IP-адресу или порту, которые уже использовались для существующего сокета, или сокета, который не был закрыт должным образом, или сокет, который все еще находится в процессе закрытия. Для серверных приложений, которым необходимо привязать несколько сокетов к одному номеру порта, рассмотрите возможность использования setsockopt (SO_REUSEADDR). Клиентским приложениям обычно не требуется вызывать привязкуподключение выбирает неиспользуемый порт автоматически. При вызове привязки с подстановочными знаками (с ADDR_ANY) ошибка WSAEADDRINUSE может быть отложена до фиксации определенного адреса. Это может произойти при вызове другой функции позже, включая подключение, прослушивание, WSAConnect или WSAJoinLeaf.
WSAEADDRNOTAVAIL
10049
Не удается назначить запрошенный адрес.
Запрошенный адрес недопустим в контексте. Обычно это происходит в результате попытки привязки к адресу, который не является допустимым для локального компьютера. Это также может быть результатом connect, sendto, WSAConnect, WSAJoinLeaf или WSASendTo , если удаленный адрес или порт недопустимы для удаленного компьютера (например, адрес или порт 0).
WSAENETDOWN
10050
Сеть не работает.
Операция на сокете обнаружила отключение сети. Это может указывать на серьезные сбои в системе сети (стеке протоколов, на основе которого работает библиотека DLL Windows Sockets), интерфейсе сети или в самой локальной сети.
WSAENETUNREACH
10051
Сеть недоступна.
Предпринята попытка выполнить операцию сокета в недоступной сети. Обычно это означает, что локальное программное обеспечение не знает маршрута для подключения к удаленному узлу.
WSAENETRESET
10052
Сетевое подключение прервано при сбросе.
Подключение было разорвано из-за активности активности при обнаружении сбоя во время выполнения операции. Он также может быть возвращен setockopt, если предпринята попытка задать SO_KEEPALIVE в подключении, которое уже завершилось сбоем.
WSAECONNABORTED
10053
Программное обеспечение вызвало прерывание подключения.
Установленное подключение было прервано программным обеспечением на хост-компьютере, возможно, из-за истечения времени ожидания передачи данных или ошибки протокола.
WSAECONNRESET
10054
Сброс подключения по одноранговой сети.
существующее соединение было принудительно завершено удаленным узлом. Обычно это происходит, если одноранговое приложение на удаленном узле внезапно останавливается, узел перезагружается, узел или удаленный сетевой интерфейс отключен или удаленный узел использует жесткое закрытие (дополнительные сведения о параметре SO_LINGER в удаленном сокете см. в разделе setsockopt ). Эта ошибка также может возникнуть, если подключение было разорвано из-за активности действия, обнаруживающего сбой во время выполнения одной или нескольких операций. Выполняемые операции завершаются сбоем при использовании WSAENETRESET. Последующие операции завершаются ошибкой WSAECONNRESET.
WSAENOBUFS
10055
Буферное пространство недоступно.
Не удалось выполнить операцию с сокетом, так как в системе недостаточно места в буфере или из-за переполнения очереди.
WSAEISCONN
10056
Сокет уже подключен.
Запрос на подключение выполнен в уже подключенном сокете. Некоторые реализации также возвращают эту ошибку, если метод sendto вызывается в подключенном сокете SOCK_DGRAM (для SOCK_STREAM сокетов параметр to в sendto игнорируется), хотя в других реализациях это рассматривается как законное событие.
WSAENOTCONN
10057
Сокет не подключен.
Запрос на отправку или получение данных был запрещен, так как сокет не подключен и (при отправке в сокет датаграммы с помощью sendto) не был предоставлен адрес. Любой другой тип операции также может возвращать эту ошибку, например параметр setsockoptSO_KEEPALIVE , если подключение было сброшено.
WSAESHUTDOWN
10058
Не удается отправить после завершения работы сокета.
Запрос на отправку или получение данных был запрещен, так как сокет уже был выключен в этом направлении при предыдущем вызове завершения работы . При вызове завершения работы запрашивается частичное закрытие сокета, что является сигналом о том, что отправка или получение или и то, и другое были прекращены.
WSAETOOMANYREFS
10059
Слишком много ссылок.
Слишком много ссылок на какой-то объект ядра.
WSAETIMEDOUT
10060
Истекло время ожидания подключения.
Попытка подключения завершилась сбоем, так как подключенная сторона не ответила должным образом через некоторое время, или сбой установленного подключения из-за того, что подключенный узел не смог ответить.
WSAECONNREFUSED
10061
Подключение отказано.
Не удалось подключиться, так как целевой компьютер отказался от него. Обычно это происходит при попытке подключиться к службе, которая неактивна на внешнем узле, то есть к службе без запущенного серверного приложения.
WSAELOOP
10062
Не удается перевести имя.
Не удается перевести имя.
WSAENAMETOOLONG
10063
Слишком длинное имя.
Компонент имени или имя слишком длинное.
WSAEHOSTDOWN
10064
Узел не работает.
Операция сокета завершилась сбоем, так как конечный узел не работает. Операция сокета обнаружила неработающий узел. Сетевое действие на локальном узле не было инициировано. На эти условия, скорее всего, указывает ошибка WSAETIMEDOUT.
WSAEHOSTUNREACH
10065
Нет маршрута к размещению.
Сделана попытка выполнить операцию на сокете для недоступного хоста. См. раздел WSAENETUNREACH.
WSAENOTEMPTY
10066
Каталог не пуст.
Не удается удалить каталог, который не является пустым.
WSAEPROCLIM
10067
Слишком много процессов.
Реализация windows Sockets может иметь ограничение на количество приложений, которые могут использовать ее одновременно. WSAStartup может завершиться сбоем с этой ошибкой, если достигнуто ограничение.
WSAEUSERS
10068
Превышена пользовательская квота.
Превышена квота пользователя.
WSAEDQUOT
10069
Превышена квота диска.
Превышена квота на диск.
WSAESTALE
10070
Ссылка на дескриптор устаревшего файла.
Ссылка на дескриптор файла больше недоступна.
WSAEREMOTE
10071
Элемент является удаленным.
Элемент недоступен локально.
WSASYSNOTREADY
10091
Сетевая подсистема недоступна.
Эта ошибка возвращается WSAStartup , если реализация сокетов Windows не может функционировать в настоящее время, так как базовая система, которую она использует для предоставления сетевых служб, в настоящее время недоступна. Пользователи должны проверка:
  • Соответствующий DLL-файл windows Sockets находится в текущем пути.
  • Они не пытаются одновременно использовать несколько реализаций сокетов Windows. Если в системе имеется несколько библиотек DLL Winsock, убедитесь, что первая библиотека в пути подходит для текущей загруженной сетевой подсистемы.
  • Документация по реализации сокетов Windows, чтобы убедиться, что все необходимые компоненты установлены и настроены правильно.
WSAVERNOTSUPPORTED
10092
Winsock.dll версия вне диапазона.
Текущая реализация сокетов Windows не поддерживает версию спецификации сокетов Windows, запрошенную приложением. Убедитесь, что программа не обращается к старым версиям файлов DLL Windows Sockets.
WSANOTINITIALISED
10093
Успешный запуск WSAStartup еще не выполнен.
Приложение не вызывало WSAStartup или WSAStartup завершилось сбоем. Приложение может обращаться к сокету, который не принадлежит текущей активной задаче (то есть пытается совместно использовать сокет между задачами), или WSACleanup вызывается слишком много раз.
WSAEDISCON
10101
Выполняется корректное завершение работы.
Возвращается WSARecv и WSARecvFrom , чтобы указать, что удаленная сторона инициировала последовательность корректного завершения работы.
WSAENOMORE
10102
Больше нет результатов.
Функция WSALookupServiceNext не может вернуть результаты.
WSAECANCELLED
10103
Звонок отменен.
Во время обработки этого вызова был выполнен вызов функции WSALookupServiceEnd . Звонок отменен.
WSAEINVALIDPROCTABLE
10104
Недопустимая таблица вызовов процедур.
Недопустимая таблица вызовов процедуры поставщика услуг. Поставщик услуг вернул фиктивную таблицу процедур в Ws2_32.dll. Обычно это вызвано тем, что один или несколько указателей функции имеет значение NULL.
WSAEINVALIDPROVIDER
10105
Недопустимый поставщик услуг.
Запрошенный поставщик услуг недопустим. Эта ошибка возвращается функциями WSCGetProviderInfo и WSCGetProviderInfo32 , если не удалось найти указанную запись протокола. Эта ошибка также возвращается, если поставщик услуг вернул номер версии, отличный от 2.0.
WSAEPROVIDERFAILEDINIT
10106
Поставщик услуг не удалось инициализировать.
Не удалось загрузить или инициализировать запрошенного поставщика услуг. Эта ошибка возвращается, если не удалось загрузить библиотеку DLL поставщика службы (сбой LoadLibrary ) или произошел сбой функции WSPStartup или NSPStartup поставщика.
WSASYSCALLFAILURE
10107
Сбой системного вызова.
Системный вызов, который никогда не должен завершаться ошибкой, завершился сбоем. Это универсальный код ошибки, возвращаемый при различных условиях.
Возвращается при сбое системного вызова, который никогда не должен завершаться ошибкой. Например, если вызов WaitForMultipleEvents завершается ошибкой или одной из функций реестра при попытке управлять каталогами протоколов или пространств имен.
Возвращается, если поставщик не возвращает success и не предоставляет расширенный код ошибки. Может указывать на ошибку реализации поставщика услуг.
WSASERVICE_NOT_FOUND
10108
Служба не найдена.
Такая служба не известна. Служба не найдена в указанном пространстве имен.
WSATYPE_NOT_FOUND
10109
Тип класса не найден.
Указанный класс не найден.
WSA_E_NO_MORE
10110
Больше нет результатов.
Функция WSALookupServiceNext не может вернуть результаты.
WSA_E_CANCELLED
10111
Звонок отменен.
Во время обработки этого вызова был выполнен вызов функции WSALookupServiceEnd . Звонок отменен.
WSAEREFUSED
10112
Запрос к базе данных был отклонен.
Запрос к базе данных завершился сбоем, так как он был активно отклонен.
WSAHOST_NOT_FOUND
11001
Узел не найден.
Такой узел не существует. Имя не является официальным именем узла или псевдонимом или не может быть найдено в запрашиваемых базах данных. Эта ошибка также может быть возвращена для запросов протокола и службы. Это означает, что указанное имя не удалось найти в соответствующей базе данных.
WSATRY_AGAIN
11002
Неавторизированный узел не найден.
Обычно это временная ошибка при разрешении имени узла. Это означает, что локальный сервер не получил ответ от полномочного сервера. Возможно, повторная попытка через некоторое время будет успешной.
WSANO_RECOVERY
11003
Это неустранимая ошибка.
Это означает, что во время поиска базы данных произошла неустранимая ошибка. Это может быть вызвано тем, что не удалось найти файлы базы данных (например, совместимые с BSD файлы HOSTS, SERVICES или PROTOCOLS) или сервер вернул запрос DNS с серьезной ошибкой.
WSANO_DATA
11004
Допустимое имя, без записи данных запрошенного типа.
Запрошенное имя является допустимым и найдено в базе данных, но не имеет правильных связанных данных, для которых разрешается. Обычным примером этого является попытка преобразования имени узла в адрес (с помощью gethostbyname или WSAsyncGetHostByName), которая использует DNS (сервер доменных имен). Возвращается запись MX, но не запись A, указывающая, что сам узел существует, но недоступен напрямую.
WSA_QOS_RECEIVERS
11005
Приемники QoS.
Прибыл по крайней мере один резерв качества обслуживания.
WSA_QOS_SENDERS
11006
Отправители качества обслуживания.
Прибыл по крайней мере один путь отправки QoS.
WSA_QOS_NO_SENDERS
11007
Нет отправителей QoS.
Нет отправителей качества обслуживания.
WSA_QOS_NO_RECEIVERS
11008
QoS нет получателей.
Приемники QoS отсутствуют.
WSA_QOS_REQUEST_CONFIRMED
11009
Запрос QoS подтвержден.
Запрос резервирования QoS подтвержден.
WSA_QOS_ADMISSION_FAILURE
11010
Ошибка допуска QoS.
Произошла ошибка качества обслуживания из-за нехватки ресурсов.
WSA_QOS_POLICY_FAILURE
11011
Сбой политики качества обслуживания.
Запрос качества обслуживания был отклонен, так как системе политики не удалось выделить запрошенный ресурс в рамках существующей политики.
WSA_QOS_BAD_STYLE
11012
QoS плохой стиль.
Обнаружен неизвестный или конфликтующий стиль QoS.
WSA_QOS_BAD_OBJECT
11013
Недопустимый объект QoS.
Возникла проблема с некоторой частью буфера filterspec или буфером конкретного поставщика в целом.
WSA_QOS_TRAFFIC_CTRL_ERROR
11014
Ошибка управления трафиком QoS.
Ошибка с базовым API управления трафиком (TC) в качестве универсального запроса QoS была преобразована для локального применения API TC. Это может быть вызвано ошибкой нехватки памяти или внутренней ошибкой поставщика качества обслуживания.
WSA_QOS_GENERIC_ERROR
11015
Общая ошибка качества обслуживания.
Общая ошибка качества обслуживания.
WSA_QOS_ESERVICETYPE
11016
Ошибка типа службы QoS.
В приложении QoS flowspec обнаружен недопустимый или нераспознанный тип службы.
WSA_QOS_EFLOWSPEC
11017
Ошибка QoS flowspec.
В структуре QOS обнаружен недопустимый или несогласованный объект flowspec.
WSA_QOS_EPROVSPECBUF
11018
Недопустимый буфер поставщика QoS.
Недопустимый буфер поставщика QoS.
WSA_QOS_EFILTERSTYLE
11019
Недопустимый стиль фильтра QoS.
Использовался недопустимый стиль фильтра QoS.
WSA_QOS_EFILTERTYPE
11020
Недопустимый тип фильтра QoS.
Использовался недопустимый тип фильтра QoS.
WSA_QOS_EFILTERCOUNT
11021
Неправильное число фильтров QoS.
В FLOWDESCRIPTOR указано неверное число фильтров QoS.
WSA_QOS_EOBJLENGTH
11022
Недопустимая длина объекта QoS.
Объект с недопустимым полем ObjectLength был указан в буфере поставщика QoS.
WSA_QOS_EFLOWCOUNT
11023
Неверное число потоков QoS.
В структуре QoS указано неверное число дескрипторов потока.
WSA_QOS_EUNKOWNPSOBJ
11024
Нераспознанный объект QoS.
Нераспознанный объект найден в буфере поставщика QoS.
WSA_QOS_EPOLICYOBJ
11025
Недопустимый объект политики качества обслуживания.
В буфере поставщика QoS обнаружен недопустимый объект политики.
WSA_QOS_EFLOWDESC
11026
Недопустимый дескриптор потока QoS.
Недопустимый дескриптор потока QoS найден в списке дескрипторов потока.
WSA_QOS_EPSFLOWSPEC
11027
Недопустимые потоки для конкретного поставщика QoSpec.
В буфере поставщика QoS обнаружен недопустимый или несогласованный объект flowspec.
WSA_QOS_EPSFILTERSPEC
11028
Недопустимые фильтры для поставщика QoS.
В буфере поставщика QoS обнаружен недопустимый параметр FILTERSPEC.
WSA_QOS_ESDMODEOBJ
11029
Недопустимый объект режима отмены формы QoS.
Недопустимый объект режима отмены фигуры найден в буфере поставщика QoS.
WSA_QOS_ESHAPERATEOBJ
11030
Недопустимый объект скорости QoS.
В буфере поставщика QoS обнаружен недопустимый объект скорости формирования.
WSA_QOS_RESERVED_PETYPE
11031
Зарезервированный тип элемента QoS политики.
Зарезервированный элемент политики найден в буфере поставщика QoS.

 

Требования

Требование Значение
Заголовок
Winsock2.h;
Winerror.h

См. также раздел

Коды ошибок : errno, h_errno и WSAGetLastError

Обработка ошибок Winsock

FormatMessage

WSAGetLastError