На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > Глючит TSocketClient или я?
      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, а при разрыве выходить из программы. Не проще ли написать процедуру которая ожидает соединение и возобнавляет если оно разорвалось?
        Есть мнение, чтот текстовое описание этих ошибок есть в ресурсах socket.dll или в каких там библиотеках лежат сетевые апи.. И наверника можно написать универсальную функцию аля SysErrorMessage безо всякого case'а.. Хотя те виднее..

        Добавлено
        Ну вобщем то я был прав

        ExpandedWrap disabled
          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;
          В случае успеха функция 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 стр.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0238 ]   [ 17 queries used ]   [ Generated: 29.03.24, 15:31 GMT ]