Winsock2 коды ошибок

The following Winsock Error codes can be recorded by MDaemon to report socket failures. The code descriptions are detailed below followed by why these socket errors may occur in MDaemon.

WSAEADDRNOTAVAIL
10049
Cannot assign requested address.
The requested address is not valid in its context. This normally results from an attempt to bind to an address that is not valid for the local computer. This can also result from connect, sendto, WSAConnect, WSAJoinLeaf, or WSASendTo when the remote address or port is not valid for a remote computer (for example, address or port 0).

Winsock 10049 typically occurs when MDaemon is configured to bind an invalid or non-existent IP address.

WSAECONNABORTED
10053
Software caused connection abort.
An established connection was aborted by the software in your host computer, possibly due to a data transmission time-out or protocol error.

WSAECONNRESET
10054
Connection reset by peer.
An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET

WSAETIMEDOUT
10060
Connection timed out.
A connection attempt failed because the connected party did not properly respond after a period of time, or the established connection failed because the connected host has failed to respond.

WSAECONNREFUSED
10061
Connection refused.
No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign host—that is, one with no server application running.

As you would expect, error codes, like socket functions, have a UNIX pedigree. The list of errors and their brief descriptions are in Appendix B. As well as that pedigree, we have Winsock-specific error codes resulting in a hybrid. If you examine Winsock2.pas, you will see two blocks of error codes that begin with WSA and E prefixes. These refer to Winsock and Berkeley error codes, respectively. The Berkeley error codes are mapped to their Winsock equivalents. This mapping is rather useful for UNIX developers porting their socket applications to Windows. Thankfully, this detail is irrelevant to Delphi developers.

Rather than listing what’s common to Winsock and UNIX socket error codes, the following list shows Winsock-specific error codes not found in UNIX. We will describe some of these errors in detail when we discuss the Winsock functions in the chapters to follow. Note that we will not discuss Quality of Service (error codes from WSA_QOS_RECEIVERS to and including WSA_QOS_ RESERVED_PETYPE), as this is a topic for another tome.

WSASYSNOTREADY

WSAVERNOTSUPPORTED

WSANOTINITIALISED

WSAEDISCON

WSAENOMORE

WSAECANCELLED

WSAEINVALIDPROCTABLE

WSAEINVALIDPROVIDER

WSAEPROVIDERFAILEDINIT

WSASYSCALLFAILURE

WSASERVICE_NOT_FOUND

WSATYPE_NOT_FOUND

WSA_E_NO_MORE

WSA_E_CANCELLED

WSAEREFUSED

WSA QOS RECEIVERS

WSA_QOS_SENDERS

WSA_QOS_NO_SENDERS

WSA_QOS_NO_RECEIVERS

WSA_QOS_REQUEST_CONFIRMED

WSA_QOS_ADMISSION_FAILURE

WSA_QOS_POLICY_FAILURE

WSA_QOS_BAD_STYLE

WSA_QOS_BAD_OBJECT

WSA_QOS_TRAFFIC_CTRL_ERROR

WSA_QOS_GENERIC_ERROR

WSA_QOS_ESERVICETYPE

WSA_QOS_EFLOWSPEC

WSA_QOS_EPROVSPECBUF

WSA_QOS_EFILTERSTYLE

WSA_QOS_EFILTERTYPE

WSA QOS EFILTERCOUNT

WSA_QOS_EOBJLENGTH

WSA_QOS_EFLOWCOUNT

WSA_QOS_EUNKOWNPSOBJ

WSA_QOS_EPSFLOWSPEC WSA_QOS_EPSFILTERSPEC WSA_QOS_ESDMODEOBJ WSA_QOS_ESHAPERATEOBJ

WSA_QOS_EPOLICYOBJ WSA_QOS_EFLOWDESC

WSA_QOS_RESERVED_PETYPE

Before concluding this section, here is a final word to the wise about error codes: It is all very well for your application to handle Winsock exceptions and report error codes as they arise. Your Winsock application should also present exceptions in plain language as well as the actual error code for ease of error reporting for the user. In the examples in this book, we use SysErrorMessage(), a function that translates error codes into plain language that your user will hopefully understand. The sting in the tail with this function is that it doesn’t work across all Windows platforms. The SysErrorMessage() function works fine on Windows 2000 but reports an empty string on Windows NT 4.0.

TIP: Use SysErrorMessage() to present a meaningful explanation of Winsock errors to your users.

Listing 2-3 demonstrates how to use SysErrorMessage().

function WSAGetLastError Winsock2.pas

Syntax

WSAGetLastError: Integer; stdcall; Description

This function retrieves the error status for the last network operation that failed.

Parameters

None

Return Value

The return value indicates the error code for the last operation that failed. See Also getsockopt, WSASetLastError Example

Listing 2-2 (program EX22) shows how to use WSAGetLastError().

Listing 2-2: Using WSAGetLastError()

{This example demonstrates how to use WSAGetLastError function. To create an artificial error, we set the size of the Name array to zero before calling the function gethostname(), which will cause Winsock to report a bad address due to an insufficient allocation to store the name. We will examine the gethostname() function later in the book.

No inputs are required for this console application.

program EX22;

{$APPTYPE CONSOLE}

uses SysUtils, Winsock2;

WSAData : TWSAData; Res : Integer; begin if WSAStartUp($101, WSAData) = 0 then try

Res := gethostname(‘127.0.0.1’,0); // this will always fail …

if Res = Integer(SOCKET_ERROR) then begin

WriteLn(Format(‘Call to gethostname() failed with error: %d’,[WSAGetLastError])); WriteLn(Format(‘Reason for the error is: %s’,[SysErrorMessage(WSAGetLastError)])); end; finally WSACleanUp; end else

WriteLn(‘Failed to load Winsock.’); end.

procedure WSASetLastError Winsock2.pas

Syntax

WSASetLastError (¡Error: Integer); stdcall; Description

The function sets the error code that can be retrieved through the WSAGetLastError() function.

Parameters iError: Integer that specifies the error code to be returned by a subsequent WSAGetLastError() call

Return Value

There is no return value. See Also getsockopt, WSAGetLastError

Example

Listing 2-3 (program EX23) shows how to use WSASetLastError() and WSAGetLastError().

Listing 2-3: Using WSASetLastError() and WSAGetLastError()

  • This contrived example demonstrates how to use the WSASetLastError() function} program EX23;
  • APPTYPE CONSOLE}

uses Dialogs, SysUtils, Winsock2;

WSAData : TWSAData; Res,

OldError : Integer; begin if WSAStartUp($101, WSAData) = 0 then try

// Create a virtual error, any old error code will do nicely … OldError := 10061; WSASetLastError(OldError);

WriteLn(Format(‘Virtual error is: %d’,[WSAGetLastError]));

WriteLn(Format(‘Reason for the virtual error is: %s’,[SysErrorMessage(WSAGetLastError)])); // Now create an artificial error …

Res := gethostname(‘127.0.0.1’,0); // This will always fail as length of the name is zero…

if Res = Integer(SOCKET_ERROR) then begin

WriteLn(‘An Artificial Error:’);

WriteLn(Format(‘Call to gethostname() failed with error: %d’,[WSAGetLastError])); WriteLn(Format(‘Reason for the error is: %s’,[SysErrorMessage(WSAGetLastError)])); WriteLn;

WriteLn(Format(‘The virtual error is %d’, [OldError])); WSASetlastError(OldError);

WriteLn(Format(‘Reason for the virtual error is: %s’,[SysErrorMessage(WSAGetLastError)])); end; finally WSACleanUp; end else

WriteLn(‘Failed to load Winsock.’); end.

Continue reading here: The Many Faces of the Winsock DLL

Was this article helpful?

Код

Краткое
описание сущности ошибки
10004   Выполнение операции с сокетом, блокирующей выполнение программы,
прервано вызовом специальной функции. 10013  Нет разрешения
на доступ к сокету. 10014  Неверный адрес
указателя при вызове функции. 10022  Неправильный
аргумент при вызове функции для работы
с сокетами. 10024  Слишком много
открытых сокетов на нить, процесс или
глобальных. 10035  Ресурс временно
недоступен, при выполнении функции
работы с сокетом, которая не может
выполнить операцию немедленно. 10036  Одна блокирующая
операция сейчас уже выполняется.  10037  Одна операция с
неблокирующим сокетом  уже
выполняется.  10038  Попытка вызвать
функцию, работающую с сокетами, при
передаче ей в аргументе значения,
которое не является правильным
значением сокета. Обычно возникает, при
попытке работы с уже  закрытым
сокетом. 10039  Требуется адрес
назначения 10040  Сообщение слишком
длинное при передаче дейтаграммы. 10041  Тип протокол не
поддерживается для данного сокета. 10042  Неправильная опция
или уровень заданы в функциях опций
сокетов 10043  Запрошенный
протокол не сконфигурирован для работы
с системе  10044  Тип сокета не
поддерживается 10045  Операция с сокетом
не поддерживается 10046  Семейство
протоколов не поддерживается 10047  Адрес не
поддерживается на выбранном протоколе
сокета 10048  Адрес+порт уже
используется на этом хосте. Очень
распространённая ошибка, когда две
программы-серверы пытаются
использовать один и тот же порт для
приема запросов клиентов.
10049  Невозможно
использовать запрошенный адрес для
привязки в порту 10050  Сеть
неработоспособна 10051  Сеть недоступна,
аппаратура не знает как туда переслать
пакет,  возможно из-за ненастроенной
маршрутизации. 10052  Соединение
разорвано из-за сбоя при выполнении
операции  10053  Программное
обеспечение компьютера, на котором
выполняется данная программа,
разорвало соединение.  10054  Соединение
разорвано с удаленного компьютера,
возможно, что так оно и задумано было, и
клиент завершил всю передачу
информации по сокету. 10055  Не места в буфере или
очереди. 10056  Сокет уже
подсоединен. 10057  Сокет не
подсоединенный 10058  Невозможно послать
или получить данные по сокету, из-за  того,
что эта операция уже запрещена
функцией shutdown 10060  Timeout 10061  Удаленный компьютер
отказал в соединении, возможно не нём
не запущен соответствующая программа
сервер. 10064  Компьютер, с которым
производится попытка соединения
выключен. 10065  К удаленному
компьютеру не найдет маршрут пересылки
пакетов. 10067  Запущено слишком
много процессов, использующих Windows Socket  10091  Сетевая подсистема
недоступна. 10092  Неверная версия
winsock.dll 10093  Не выполнена функция
WSAStartup перед использованием любой
другой фукнции работы с сокетами. 10109  Запрошенный тип
класса не найден. 10101  Удаленный компьютер
инициировал завершение соединения 11001  Запрошенное имя
компьютера не найдено 11002  Временная ошибка при
разрешении имени компьютера в адрес,
возможно её не будет при повторе
операции через некоторое время. 11003  Невосстанавливаемая
ошибка при разрешении имени в адрес. 11004  С запрошенным именем
компьютера не связано никакой
правильной информации об адресе, хотя
само имя присутствует в соответствующих
базах данных имён.

  Все
ошибки, которые происходят
при соединениях с
серверами и клиентами в
процессе работы программы
BSB регистрируются, как и
многие другие моменты
работы, в файле-журнале bsb.log.
Но в целях упрощения в
журнал пишутся только коды
ошибок, а не их текстовое
описание. Аналогично
обстоит ситуация и с
клиентской программой «BSB Client Informer»
— она выдает номер ошибки.

   Программа BSB для связи
по протоколу TCP/IP
использует библиотеку Windows
Sockets, и далее приведено
очень краткое текстовое
описание на русском языке
кодов тех ошибок, которые
могут возникать при работе
с функциями этой
библиотеки WinSocks.

Код

Краткое
описание сущности
ошибки
10004   Выполнение
операции с сокетом,
блокирующей
выполнение программы,
прервано вызовом
специальной функции.
10013  Нет
разрешения на доступ к
сокету.
10014  Неверный
адрес указателя при
вызове функции.
10022  Неправильный
аргумент при вызове
функции для работы с
сокетами.
10024  Слишком
много открытых
сокетов на нить,
процесс или
глобальных.
10035  Ресурс
временно недоступен,
при выполнении
функции работы с
сокетом, которая не
может выполнить
операцию немедленно.
10036  Одна
блокирующая операция
сейчас уже
выполняется. 
10037  Одна
операция с
неблокирующим
сокетом  уже
выполняется. 
10038  Попытка
вызвать функцию,
работающую с сокетами,
при передаче ей в
аргументе значения,
которое не является
правильным значением
сокета. Обычно
возникает, при попытке
работы с уже  закрытым
сокетом.
10039  Требуется
адрес назначения
10040  Сообщение
слишком длинное при
передаче дейтаграммы.
10041  Тип протокол
не поддерживается для
данного сокета.
10042  Неправильная
опция или уровень
заданы в функциях
опций сокетов
10043  Запрошенный
протокол не
сконфигурирован для
работы с системе 
10044  Тип
сокета не
поддерживается
10045  Операция с
сокетом не
поддерживается
10046  Семейство
протоколов не
поддерживается
10047  Адрес не
поддерживается на
выбранном протоколе
сокета
10048  Адрес+порт
уже используется на
этом хосте. Очень
распространённая
ошибка, когда две
программы-серверы
пытаются использовать
один и тот же порт для
приема запросов
клиентов.
10049  Невозможно
использовать
запрошенный адрес для
привязки в порту
10050  Сеть
неработоспособна
10051  Сеть
недоступна,
аппаратура не знает
как туда переслать
пакет,  возможно из-за
ненастроенной
маршрутизации.
10052  Соединение
разорвано из-за сбоя
при выполнении
операции 
10053  Программное
обеспечение
компьютера, на котором
выполняется данная
программа, разорвало
соединение. 
10054  Соединение
разорвано с
удаленного
компьютера, возможно,
что так оно и задумано
было, и клиент
завершил всю передачу
информации по сокету.
10055  Не места в
буфере или очереди.
10056  Сокет уже
подсоединен.
10057  Сокет не
подсоединенный
10058  Невозможно
послать или получить
данные по сокету, из-за
 того, что эта
операция уже
запрещена функцией
shutdown
10060  Timeout
10061  Удаленный
компьютер отказал в
соединении, возможно
не нём не запущен
соответствующая
программа сервер.
10064  Компьютер, с
которым производится
попытка соединения
выключен.
10065  К удаленному
компьютеру не найдет
маршрут пересылки
пакетов.
10067  Запущено
слишком много
процессов,
использующих Windows Socket 
10091  Сетевая
подсистема
недоступна.
10092  Неверная
версия winsock.dll
10093  Не выполнена
функция WSAStartup перед
использованием любой
другой фукнции работы
с сокетами.
10109  Запрошенный
тип класса не найден.
10101  Удаленный
компьютер инициировал
завершение соединения
11001  Запрошенное
имя компьютера не
найдено
11002  Временная
ошибка при разрешении
имени компьютера в
адрес, возможно её не
будет при повторе
операции через
некоторое время.
11003  Невосстанавливаемая
ошибка при разрешении
имени в адрес.
11004  С
запрошенным именем
компьютера не связано
никакой правильной
информации об адресе,
хотя само имя
присутствует в
соответствующих базах
данных имён.

Понравилась статья? Поделить с друзьями:
  • Wireguard android ошибка при запуске туннеля bad address
  • Wire is not closed freecad ошибка
  • Winsetupfromusb выдает ошибку при записи
  • Winsock ошибка 10061
  • Winrar ошибка нет файлов для извлечения