Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.12.172] |
|
Сообщ.
#1
,
|
|
|
10022: Получен недопустимый аргумент.
10024: Открыто слишком много сокетов. 10035: Операция на незаблокированном сокете не может быть завершена немедленно. 10036: Сейчас выполняется операция блокировки. 10037: На незаблокированном сокете сделана попытка выполнить операцию при наличии другой выполняемой операции. 10038: Сделана попытка выполнить операцию на объекте, не являющемся сокетом. 10039: В операции на сокете пропущен обязательный адрес. 10040: Сообщение, отправленное на сокет датаграмм, было больше, чем буфер внутренних сообщений или был превышен иной сетевой параметр. Также возможно, что буфер для принятия сообщения был меньше, чем размер сообщения. 10041: Протокол, указанный в вызове функции сокета, не поддерживает такую семантику для требуемого типа сокета. 10042: Для вызова getsockopt или setsockopt был указан неизвестный, недопустимый или неподдерживаемый параметр или уровень. 10043: Требуемый протокол не настроен в данной системе, или не существует его реализации. 10044: Поддержка указанного типа сокетов в этом семействе адресов отсутствует. 10045: Предпринятая операция не поддерживается для выбранного типа объекта. 10046: Данное семейство протоколов не настроено в системе, или оно не реализовано. 10047: Адрес несовместим с выбранным протоколом. 10048: Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт). 10049: Требуемый адрес для своего контекста неверен. 10050: Операция на сокете обнаружила отключение сети. 10051: Сделана попытка выполнить операцию на сокете при отключенной сети. 10052: Подключение было разорвано из-за ошибки во время выполнения операции. 10053: Программа на вашем хост-компьютере разорвала установленное подключение. 10054: Удаленный хост принудительно разорвал существующее подключение. 10055: Невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена. 10056: Сделан запрос на подключение для уже подключенного сокета. 10057: Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied. 10058: Запрос на отправку или получение данных был запрещен, т.к. сокет уже отключен в данном направлении на основании прежней запроса на его отключение. 10059: Слишком много ссылок на некоторый ключевой объект. 10060: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. 10061: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение. 10062: Не удается преобразовать имя. 10063: Компонент имени или все имя слишком длинно. 10064: Произошла ошибка операции на сокете, т.к. конечный хост выключен. 10065: Сделана попытка выполнить операцию на сокете для недоступного хоста. 10067: Реализация Windows Sockets может иметь ограничения на количество одновременно выполняющихся приложений. Разбей их по категориям (выбери касающиеся тебя) и через Case поймешь разорвано соединение или оно не установилось. Добавлено А зачем тебе при неустановившемся соединении получать -1, а при разрыве выходить из программы. Не проще ли написать процедуру которая ожидает соединение и возобнавляет если оно разорвалось? |
Сообщ.
#2
,
|
|
|
Есть мнение, чтот текстовое описание этих ошибок есть в ресурсах socket.dll или в каких там библиотеках лежат сетевые апи.. И наверника можно написать универсальную функцию аля SysErrorMessage безо всякого case'а.. Хотя те виднее..
Добавлено Ну вобщем то я был прав function WSAErrorMessage(ErrorCode: Integer): string; var Buffer: array[0..255] of Char; var Len: Integer; begin Len := FormatMessage(FORMAT_MESSAGE_FROM_HMODULE or FORMAT_MESSAGE_IGNORE_INSERTS or FORMAT_MESSAGE_ARGUMENT_ARRAY, Pointer(GetModuleHandle('wsock32.dll')), ErrorCode, 0, Buffer, SizeOf(Buffer), nil); while (Len > 0) and (Buffer[Len - 1] in [#0..#32, '.']) do Dec(Len); SetString(Result, Buffer, Len); end; |
Сообщ.
#3
,
|
|
|
В случае успеха функция WSAStartup возвращает нулевое значение. Если происходит ошибка, возвращается одно из следующих значений:
WSASYSNOTREADY Сетевое программное обеспечение не готово для работы WSAVERNOTSUPPORTED Функция не поддерживается данной реализацией интерфейса Windows Sockets WSAEINVAL Библиотека DLL, обеспечивающая интерфейсe Windows Sockets, не соответствуетверсии, указанной приложением указанной в параметре wVersionRequested Если ошибка возникла при выполнении функции WSACleanup , функция WSAGetLastError может вернуть одно из следующих значений:Значение Описание WSANOTINITIALISED Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup WSAENETDOWN Сбой сетевого программного обеспечения WSAEINPROGRESS Во время вызыва функции WSACleanup выполнялась одна из блокирующих функций интерфейса Windows Sockets В случае успеха функция socket возвращает дескриптор, который нужно использовать для выполнения всех операций над данным сокетом. Если же произошла ошибка, эта функция возвращает значение INVALID_SOCKET . Для анализа причины ошибки вы должны вызвать функцию WSAGetLastError , которая в данном случае может вернуть один из следующих кодов ошибки: WSANOTINITIALISED Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup WSAENETDOWN Сбой сетевого программного обеспечения WSAEAFNOSUPPORT Указан неправильный тип адреса WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets WSAEMFILE Израсходован весь запас свободных дескрипторов WSAENOBUFS Нет памяти для создания буфера WSAEPROTONOSUPPORT Указан неправильный протокол WSAEPROTOTYPE Указанный протокол несовместим с данным типом сокета WSAESOCKTNOSUPPORT Указанный тип сокета несовместим с данным типом адреса Для освобождения ресурсов приложение должно закрывать сокеты, которые ему больше не нужны, вызывая функцию closesocket, коды ошибок для этой функции: WSANOTINITIALISED Перед использованием функции closesocket необходимо вызвать функцию WSAStartup WSAENETDOWN Сбой в сети WSAENOTSOCK Указанный в параметре дескриптор не является сокетом WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall В случае ошибки функция bind возвращает значение SOCKET_ERROR . Дальнейший анализ причин ошибки следует выполнять при помощи функции WSAGetLastError . Возможные коды ошибок перечислены ниже: WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup WSAENETDOWN Сбой в сети WSAEADDRINUSE Указанный адрес уже используется WSAEFAULT Значение параметра namelen меньше размера структуры sockaddr WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets WSAEAFNOSUPPORT Этот протокол не может работать с указанным семейством адресов WSAEINVAL Сокет уже привязан к адресу WSAENOBUFS Установлено слишком много соединений WSAENOTSOCK Указанный в параметре дескриптор не является сокетом Ниже мы привели список возможных кодов ошибок для функции listen: WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup WSAENETDOWN Сбой в сети WSAEADDRINUSE Указанный адрес уже используется WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets WSAEINVAL Сокет еще не был привязан к адресу или уже находится в подключенном состоянии WSAEISCONN Сокет уже находится в подключенном состоянии WSAEMFILE Недостаточно дескрипторов файлов WSAENOBUFS Нет места для размещения буфера WSAENOTSOCK Указанный в параметре дескриптор не является сокетом WSAEOPNOTSUPP Функция listen не работает с сокетом указанного типа Приведем список возможных кодов ошибок для функции accept: WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup WSAENETDOWN Сбой в сети WSAEFAULT Значение параметра addrlen меньше размера структуры адреса WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets WSAEINVAL Перед вызовом функции accept не была вызывана функция listen WSAEMFILE Нет доступных дескрипторов WSAENOBUFS Установлено слишком много соединений WSAENOTSOCK Указанный в параметре дескриптор не является сокетом WSAEOPNOTSUPP Данный тип сокета нельзя использовать при вызове функций, ориентированных на работу с каналом связи WSAEWOULDBLOCK Сокет отмечен как неблокирующий и в настоящее время нет каналов связи, которые нужно устанавливать Приведем список кодов ошибок, которые могут возникать при вызове команды send: WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup WSAENETDOWN Сбой в сети WSAEACCES Указанный адрес является широковещательным (broadcast), однако перед вызовом функции не был установлен соответствующий флаг WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets WSAEFAULT Параметр buf указан неправильно (он не указывает на адресное пространство, принадлежащее приложению) WSAENETRESET Необходимо сбросить соединение WSAENOBUFS Возникла блокировка буфера WSAENOTCONN Сокет не подсоединен WSAENOTSOCK Указанный в параметре дескриптор не является сокетом WSAESHUTDOWN Сокет был закрыт функцией shutdown WSAEWOULDBLOCK Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке WSAEMSGSIZE Был использован сокет типа SOCK_DGRAM (предназначенный для передачи датаграмм). При этом размер пакета данных превышает максимально допустимый для данной реализации интерфейса Windows Sockets WSAEINVAL Сокет не был подключен функцией bind WSAECONNABORTED Сбой из-за слишком большой задержки или по другой причине WSAECONNRESET Сброс соединения удаленным узлом При выполнении функции recv могут возникать следующие ошибки: WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup WSAENETDOWN Сбой в сети WSAENOTCONN Сокет не подсоединен WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets WSAENOTSOCK Указанный в параметре дескриптор не является сокетом WSAESHUTDOWN Сокет был закрыт функцией shutdown WSAEWOULDBLOCK Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке WSAEMSGSIZE Размер пакета данных превышает размер буфера, в результате чего принятый пакет был обрезан WSAEINVAL Сокет не был подключен функцией bind WSAECONNABORTED Сбой из-за слишком большой задержки или по другой причине WSAECONNRESET Сброс соединения удаленным узлом Если функция WSAAsyncSelect выполнилась успешно, она возвращает нулевое значение, при ошибке - значение SOCKET_ERROR. В зависимости от значения последнего параметра могут возникать разные коды ошибки, которые можно получить при помощи функции WSAGetLastError. Следующие ошибки могут возникнуть при любом значении параметра: WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup WSAENETDOWN Сбой в сети WSAEINVAL Сокет не был подключен функцией bind WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets Дополнительный код ошибки можно получить из параметра lParam при помощи макрокоманды WSAGETSELECTERROR. При использовании параметра FD_CONNECT возможно появление следующих ошибок: WSAEADDRINUSE Указанный адрес уже используется WSAEADDRNOTAVAIL Указанный адрес не доступен WSAEAFNOSUPPORT Для данного сокета нельзя использовать указанное семейство адресов WSAECONNREFUSED Попытка установления канала связи была отвергнута WSAEDESTADDRREQ Необходимо указать адрес получателя пакета WSAEFAULT Неправильно указан параметр namelen WSAEINVAL Сокет уже подключен к адресу WSAEISCONN Сокет уже подсоединен WSAEMFILE Больше нет доступных дескрипторов WSAENETUNREACH Из данного узла и в данное время невозможно получить доступ к сети WSAENOBUFS Нет места для размещения буфера WSAENOTCONN Сокет на подключен WSAENOTSOCK Указан дескриптор файла, а не сокета WSAETIMEDOUT При попытке установления канала связи возникла задержка во времени Если используется параметр FD_CLOSE, может возникнуть одна из следующих ошибок: WSAENETDOWN Сбой в сети WSAECONNRESET Сброс соединения удаленным узлом WSAECONNABORTED Сбой из-за слишком большой задержки или по другой причине Ниже мы привели возможные коды ошибок для функции recv from: WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup WSAENETDOWN Сбой в сети WSAEFAULT Слишком малое значение параметра, определяющего размер буфера для приема данных WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets WSAEINVAL Сокет не был подключен функцией bind WSAENOTSOCK Указанный дескриптор не является дескриптором сокета WSAESHUTDOWN Сокет был закрыт функцией shutdown WSAEWOULDBLOCK Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке WSAEMSGSIZE Размер датаграммы слишком большой, поэтому соответствующий блок данных не помещается в буфер. Принятый блок данных был обрезан WSAECONNABORTED Сбой из-за слишком большой задержки или по другой причине WSAECONNRESET Сброс соединения удаленным узлом --- По материалам © Александр Фролов, Григорий Фролов Том 23, М.: Диалог-МИФИ, 1993, 283 стр. |