Что такое код socket_strerror

socket_strerror

(PHP 4 >= 4.1.0, PHP 5)

socket_strerror — Return a string describing a socket error

Описание

socket_strerror() takes as its errno parameter a socket error code as returned by socket_last_error() and returns the corresponding explanatory text.

Although the error messages generated by the socket extension are in English, the system messages retrieved with this function will appear depending on the current locale (LC_MESSAGES).

Список параметров

Возвращаемые значения

Returns the error message associated with the errno parameter.

Примеры

Пример #1 socket_strerror() example

if ( false == ( $socket = @ socket_create ( AF_INET , SOCK_STREAM , SOL_TCP ))) <
echo «socket_create() failed: reason: » . socket_strerror ( socket_last_error ()) . «\n» ;
>

if ( false == (@ socket_bind ( $socket , ‘127.0.0.1’ , 80 ))) <
echo «socket_bind() failed: reason: » . socket_strerror ( socket_last_error ( $socket )) . «\n» ;
>
?>

The expected output from the above example (assuming the script is not run with root privileges):

Смотрите также

  • socket_accept() — Accepts a connection on a socket
  • socket_bind() — Binds a name to a socket
  • socket_connect() — Initiates a connection on a socket
  • socket_listen() — Listens for a connection on a socket
  • socket_create() — Create a socket (endpoint for communication)

Что такое код socket_strerror

socket_strerror — возвращает строку — описание ошибки сокета.

Описание

string socket_strerror (int errno)

Эта функция — ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

Пример 1. socket_strerror()

echo «socket_bind() failed: reason: » . socket_strerror(socket_last_error($socket)) . «\n»; > ?>

Ожидаемый вывод этого пример (предполагая, что скрипт не запущен с привилегиями root):

Предупреждение!

socket_bind() failed: reason: Permission denied

socket_strerror

Руководство по PHP
Пред. След.

socket_strerror

(PHP 4 >= 4.1.0, PHP 5)

socket_strerror — Return a string describing a socket error

Description

socket_strerror() takes as its errno parameter a socket error code as returned by socket_last_error() and returns the corresponding explanatory text. This makes it a bit more pleasant to figure out why something d >socket_strerror() , and it tells you what happened.

Пример 1. socket_strerror() example

if ( false == ( $socket = @ socket_create ( AF_INET , SOCK_STREAM , SOL_TCP ))) <
echo «socket_create() failed: reason: » . socket_strerror ( socket_last_error ()) . «\n» ;
>

if ( false == (@ socket_bind ( $socket , ‘127.0.0.1’ , 80 ))) <
echo «socket_bind() failed: reason: » . socket_strerror ( socket_last_error ( $socket )) . «\n» ;
>
?>

The expected output from the above example (assuming the script is not run with root privileges):

FPublisher

Web-технологии: База знаний

Документация PHP

socket_strerror

(PHP 4 >= 4.0.7, PHP 5)

socket_strerror — Return a string describing a socket error

Описание

string socket_strerror ( int $errno )

socket_strerror() takes as its errno parameter a socket error code as returned by socket_last_error() and returns the corresponding explanatory text.

Замечание: Although the error messages generated by the socket extension are in English, the system messages retrieved with this function will appear depending on the current locale (LC_MESSAGES).

Список параметров

A valid socket error number, likely produced by socket_last_error().

Возвращаемые значения

Returns the error message associated with the errno parameter.

Примеры

Пример #1 socket_strerror() example

if ( false == ( $socket = @ socket_create ( AF_INET , SOCK_STREAM , SOL_TCP ))) <
echo «socket_create() failed: reason: » . socket_strerror ( socket_last_error ()) . «\n» ;
>

if ( false == (@ socket_bind ( $socket , ‘127.0.0.1’ , 80 ))) <
echo «socket_bind() failed: reason: » . socket_strerror ( socket_last_error ( $socket )) . «\n» ;
>
?>

The expected output from the above example (assuming the script is not run with root privileges):

Socket_strerror

Php функции


Php скрипты


socket_strerror

(PHP 4 >= 4.1.0, PHP 5)

socket_strerror — Return a string describing a socket error

Description

string socket_strerror ( int errno )

socket_strerror() takes as its errno parameter a socket error code as returned by socket_last_error() and returns the corresponding explanatory text. This makes it a bit more pleasant to figure out why something d >for instance, instead of having to track down a system include file to find out what ‘-111’ means, you just pass it to socket_strerror(), and it tells you what happened.

Пример 1. socket_strerror() example

if ( false == ( $socket = @socket_create ( AF_INET , SOCK_STREAM , SOL_TCP ))) <
echo «socket_create() failed: reason: » . socket_strerror ( socket_last_error ()) . «\n» ;
>

if ( false == (@socket_bind ( $socket , ‘127.0.0.1’ , 80 ))) <
echo «socket_bind() failed: reason: » . socket_strerror ( socket_last_error ( $socket )) . «\n» ;
>
?>

The expected output from the above example (assuming the script is not run with root privileges):

socket_bind() failed: reason: Permission denied

See also socket_accept(), socket_bind(), socket_connect(), socket_listen(), and socket_create().

add a note User Contributed Notes
socket_strerror There are no user contributed notes for this page.
socket_write socket_shutdown Last updated: Sat, 27 Jan 2007 show source | credits | sitemap | contact | advertising | mirror sites Copyright & copy ; 2001-2007 The PHP Group
All rights reserved. This mirror generously provided by:
Last updated: Sun Oct 21 04:40:01 2007 MSD

Socket Error Перечисление

Определение

Определяет коды ошибок для класса Socket. Defines error codes for the Socket class.

Предпринята попытка получить доступ к объекту Socket способом, запрещенным его правами доступа. An attempt was made to access a Socket in a way that is forbidden by its access permissions.

Обычно разрешается использовать только адрес. Only one use of an address is normally permitted.

Указанное семейство адресов не поддерживается. The address family specified is not supported. Эта ошибка возвращается, если указано семейство IPv6-адресов, а стек протокола IPv6 не установлен на локальном компьютере. This error is returned if the IPv6 address family was specified and the IPv6 stack is not installed on the local machine. Эта ошибка возвращается, если указано семейство IPv4-адресов, а стек протокола IPv4 не установлен на локальном компьютере. This error is returned if the IPv4 address family was specified and the IPv4 stack is not installed on the local machine.

Выбранный IP-адрес является недопустимым в этом контексте. The selected IP address is not valid in this context.

На незаблокированном сокете Socket уже выполняется операция. The nonblocking Socket already has an operation in progress.

Подключение разорвано платформой .NET Framework или поставщиком основного сокета. The connection was aborted by the .NET Framework or the underlying socket provider.

Удаленный узел активно отказывает в подключении. The remote host is actively refusing a connection.

Подключение сброшено удаленным компьютером. The connection was reset by the remote peer.

В операции на сокете Socket пропущен обязательный адрес. A required address was omitted from an operation on a Socket.

Выполняется правильная последовательность отключения. A graceful shutdown is in progress.

Поставщиком основного сокета обнаружен недопустимый указатель адреса. An invalid pointer address was detected by the underlying socket provider.

Ошибка при выполнении операции, вызванная отключением удаленного узла. The operation failed because the remote host is down.

Такой узел не существует. No such host is known. Данное имя не является ни официальным именем узла, ни псевдонимом. The name is not an official host name or alias.

Отсутствует сетевой маршрут к указанному узлу. There is no network route to the specified host.

Выполняется блокирующая операция. A blocking operation is in progress.

Вызов к заблокированному сокету Socketбыл отменен. A blocking Socket call was canceled.

Предоставлен недопустимый аргумент для члена объекта Socket. An invalid argument was supplied to a Socket member.

Приложение инициировало перекрывающуюся операцию, которая не может быть закончена немедленно. The application has initiated an overlapped operation that cannot be completed immediately.

Объект Socket уже подключен. The Socket is already connected.

У датаграммы слишком большая длина. The datagram is too long.

Сеть недоступна. The network is not available.

Приложение пытается задать значение KeepAlive для подключения, которое уже отключено. The application tried to set KeepAlive on a connection that has already timed out.

Не существует маршрута к удаленному узлу. No route to the remote host exists.

Отсутствует свободное буферное пространство для операции объекта Socket. No free buffer space is available for a Socket operation.

Требуемое имя или IP-адрес не найдены на сервере имен. The requested name or IP address was not found on the name server.

Неустранимая ошибка, или не удается найти запрошенную базу данных. The error is unrecoverable or the requested database cannot be located.

Приложение пытается отправить или получить данные, а объект Socket не подключен. The application tried to send or receive data, and the Socket is not connected.

Основной поставщик сокета не инициализирован. The underlying socket provider has not been initialized.

Предпринята попытка выполнить операцию объекта Socket не на сокете. A Socket operation was attempted on a non-socket.

Перекрывающаяся операция была прервана из-за закрытия объекта Socket. The overlapped operation was aborted due to the closure of the Socket.

Семейство адресов не поддерживается семейством протоколов. The address family is not supported by the protocol family.

Слишком много процессов используется основным поставщиком сокета. Too many processes are using the underlying socket provider.

Семейство протоколов не реализовано или не настроено. The protocol family is not implemented or has not been configured.

Протокол не реализован или не настроен. The protocol is not implemented or has not been configured.

Для объекта Socket был использован неизвестный, недопустимый или неподдерживаемый параметр или уровень. An unknown, invalid, or unsupported option or level was used with a Socket.

Неверный тип протокола для данного объекта Socket. The protocol type is incorrect for this Socket.

Запрос на отправку или получение данных отклонен, так как объект Socket уже закрыт. A request to send or receive data was disallowed because the Socket has already been closed.

Произошла неопознанная ошибка объекта Socket. An unspecified Socket error has occurred.

Указанный тип сокета не поддерживается в данном семействе адресов. The support for the specified socket type does not exist in this address family.

Операция Socket выполнена успешно. The Socket operation succeeded.

Подсистема сети недоступна. The network subsystem is unavailable.

Истекло время ожидания попытки подключения, или произошел сбой при отклике подключенного узла. The connection attempt timed out, or the connected host has failed to respond.

Слишком много открытых сокетов в основном поставщике сокета. There are too many open sockets in the underlying socket provider.

Не удалось разрешить имя узла. The name of the host could not be resolved. Повторите попытку позже. Try again later.

Указанный класс не найден. The specified class was not found.

Версия основного поставщика сокета выходит за пределы допустимого диапазона. The version of the underlying socket provider is out of range.

Операция на незаблокированном сокете не может быть закончена немедленно. An operation on a nonblocking socket cannot be completed immediately.

Комментарии

Большинство этих ошибок возвращаются базовым поставщиком сокета. Most of these errors are returned by the underlying socket provider.

Способ 3 — Использование неблокирующих сокетов

Третий способ основан на использовании неблокирующих сокетов (nonblocking sockets) и функции select. Сначала разберёмся, что такое неблокирующие сокеты. Сокеты, которые мы до сих пор использовали, являлись блокирующими (blocking). Это название означает, что на время выполнения операции с таким сокетом ваша программа блокируется. Например, если вы вызвали recv, а данных на вашем конце соединения нет, то в ожидании их прихода ваша программа «засыпает». Аналогичная ситуация наблюдается, когда вы вызываете accept, а очередь запросов на соединение пуста. Это поведение можно изменить, используя функцию fcntl.

sockfd = socket(AF_INET, SOCK_STREAM, 0);

fcntl(sockfd, F_SETFL, O_NONBLOCK);

Эта несложная операция превращает сокет в неблокирующий. Вызов любой функции с таким сокетом будет возвращать управление немедленно. Причём если затребованная операция не была выполнена до конца, функция вернёт -1 и запишет в errno значение EWOULDBLOCK. Чтобы дождаться завершения операции, мы можем опрашивать все наши сокеты в цикле, пока какая-то функция не вернёт значение, отличное от EWOULDBLOCK. Как только это произойдёт, мы можем запустить на выполнение следующую операцию с этим сокетом и вернуться к нашему опрашивающему циклу. Такая тактика (называемая в англоязычной литературе polling) работоспособна, но очень неэффективна, поскольку процессорное время тратится впустую на многократные (и безрезультатные) опросы.

Чтобы исправить ситуацию, используют функцию select. Эта функция позволяет отслеживать состояние нескольких файловых дескрипторов (а в Unix к ним относятся и сокеты) одновременно.

int select(int n, fd_set *readfds, fd_set *writefds,

fd_set *exceptfds, struct timeval *timeout);

FD_CLR(int fd, fd_set *set);

FD_ISSET(int fd, fd_set *set);

FD_SET(int fd, fd_set *set);

Функция select работает с тремя множествами дескрипторов, каждое из которых имеет тип fd_set. В множество readfds записываются дескрипторы сокетов, из которых нам требуется читать данные (слушающие сокеты добавляются в это же множество). Множество writefds должно содержать дескрипторы сокетов, в которые мы собираемся писать, а exceptfds — дескрипторы сокетов, которые нужно контролировать на возникновение ошибки. Если какое-то множество вас не интересуют, вы можете передать вместо указателя на него NULL. Что касается других параметров, в n нужно записать максимальное значение дескриптора по всем множествам плюс единица, а в timeout — величину таймаута. Структура timeval имеет следующий формат.

int tv_sec; // секунды

int tv_usec; // микросекунды

Поле «микросекунды» смотрится впечатляюще. Но на практике вам не добиться такой точности измерения времени при использовании select. Реальная точность окажется в районе 100 миллисекунд.

Теперь займёмся множествами дескрипторов. Для работы с ними предусмотрены функции FD_XXX, показанные выше; их использование полностью скрывает от нас детали внутреннего устройства fd_set. Рассмотрим их назначение.

FD_ZERO(fd_set *set) — очищает множество set

FD_SET(int fd, fd_set *set) — добавляет дескриптор fd в множество set

FD_CLR(int fd, fd_set *set) — удаляет дескриптор fd из множества set

FD_ISSET(int fd, fd_set *set) — проверяет, содержится ли дескриптор fd в множестве set

Если хотя бы один сокет готов к выполнению заданной операции, select возвращает ненулевое значение, а все дескрипторы, которые привели к «срабатыванию» функции, записываются в соответствующие множества. Это позволяет нам проанализировать содержащиеся в множествах дескрипторы и выполнить над ними необходимые действия. Если сработал таймаут, select возвращает ноль, а в случае ошибки -1. Расширенный код записывается в errno.

Программы, использующие неблокирующие сокеты вместе с select, получаются весьма запутанными. Если в случае с fork мы строим логику программы, как будто клиент всего один, здесь программа вынуждена отслеживать дескрипторы всех клиентов и работать с ними параллельно. Чтобы проиллюстрировать эту методику, я в очередной раз переписал код сервера с использованием select. Новая версия приведена в листинге 3. Эта программа, также написана на C++ (а не на C). В программе использовался класс set из библиотеки STL языка C++, чтобы облегчить работу с набором дескрипторов и сделать её более понятной.

Листинг 3. Код сервера (неблокирующие сокеты и select).

Что такое код socket_strerror

socket_strerror — возвращает строку — описание ошибки сокета.

Описание

string socket_strerror (int errno)

AccessDenied 10013
AddressAlreadyInUse 10048
AddressFamilyNotSupported 10047
AddressNotAvailable 10049
AlreadyInProgress 10037
ConnectionAborted 10053
ConnectionRefused 10061
ConnectionReset 10054
DestinationAddressRequired 10039
Disconnecting 10101
Fault 10014
HostDown 10064
HostNotFound 11001
HostUnreachable 10065
InProgress 10036
Interrupted 10004
InvalidArgument 10022
IOPending 997
IsConnected 10056
MessageSize 10040
NetworkDown 10050
NetworkReset 10052
NetworkUnreachable 10051
NoBufferSpaceAvailable 10055
NoData 11004
NoRecovery 11003
NotConnected 10057
NotInitialized 10093
NotSocket 10038
OperationAborted 995
OperationNotSupported 10045
ProcessLimit 10067
ProtocolFamilyNotSupported 10046
ProtocolNotSupported 10043
ProtocolOption 10042
ProtocolType 10041
Shutdown 10058
SocketError -1
SocketNotSupported 10044
SystemNotReady 10091
TimedOut 10060
TooManyOpenSockets 10024
TryAgain 11002
TypeNotFound 10109
VersionNotSupported 10092
WouldBlock 10035

Эта функция — ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

socket_strerror() принимает в качеств параметра errno код ошибки сокета, возвращённый функцией socket_last_error() , и возвращает соответствующий объясняющий текст. Вместо того чтобы заставлять системный include-файл найти, что означает ‘-111’, вы просто передаёте это значение в socket_strerror() , и она объясняет, что произошло.

Что такое код socket_strerror

Функция strerror определена в IEEE Std 1003.1, также известном как POSIX 1.

Реентрабельность

Функция strerror не реентрабельна. Для получения информации о реентрабельной версии данной функции смотри strerror_r.

Использование

Подключение

Объявление

Семантика

Функция генерирует и выводит строку в стиле языка Си с сообщением об ошибке, полученного из кода ошибки, переданного errnum.

Смотри также

  • strerror_r
  • perror
  • ISO/ANSI C
  • ISO/ANSI C++
  • POSIX
  • Единая спецификация UNIX

Ссылки

  1. strerror на сайте OpenGroup
  2. strerror на сайте Codenet

Wikimedia Foundation . 2010 .

Смотреть что такое «Strerror» в других словарях:

strerror — Строковая функция strerror функция языков C/C++, транслирующая код ошибки, который обычно хранится в глобальной переменной errno, в сообщение об ошибке, понятном человеку. Содержание 1 История 2 Реентрабельность … Википедия

Strerror — The string error function, strerror, is a C/C++ function which translates an error code, usually stored in the global variable errno, to a human readable error message.HistoryThe strerror function is defined in IEEE Std 1003.1, also known as… … Wikipedia

Strerr — Строковая функция strerror функция языков C/C++, транслирующая код ошибки, который обычно хранится в глобальной переменной errno, в сообщение об ошибке, понятном человеку. Содержание 1 История 2 Реентрабельность 3 Использование … Википедия

C string handling — C string redirects here. For the underwear and swimwear, see C string (clothing). C Standard Library Data types Character >Wikipedia

Berkeley sockets — The Berkeley sockets application programming interface (API) comprises a library for developing applications in the C programming language that perform inter process communication, most commonly across a computer network.Berkeley sockets (also… … Wikipedia

Сокеты Беркли — Сокеты Беркли интерфейс программирования приложений (API), представляющий собой библиотеку для разработки приложений на языке Си с поддержкой межпроцессного взаимодействия (IPC), часто применяемый в компьютерных сетях. Сокеты Беркли (также… … Википедия

Как найти код ошибки/причину, когда stream_socket_accept() не работает

У меня есть сервер потокового сокета, написанный на PHP. Чтобы узнать, сколько соединений он может обрабатывать одновременно, я написал симулятор в C, чтобы создать 1000 разных клиентов для подключения к серверу.

stream_socket_accept несколько раз возвращал false. Мне нужно выяснить причину этого отказа.

Я попробовал socket_last_error() и socket_strerror() чтобы получить коды ошибок, но они вернули «Успех». Эти функции, похоже, не работают в потоковых сокетах. Есть ли способ/метод, чтобы узнать фактические коды ошибок

Теперь я могу видеть сообщения об ошибках уровня PHP в моих журналах. @ прежде чем stream_socket_accept подавил сообщения об ошибках. (символ @в php)

Илон Маск рекомендует:  С builder как ускорить компиляцию с помощью предкомпилированных заголовков
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Предупреждение!