ГлавнаяОтзывы и пожеланияСтатьи
Функции по алфавиту:    a     b     c     d     e     f     g     h     i     j     k     l     m     n     o     p     q     r     s     t     u     v     w     x     y     z  

socket_select


(PHP 4 >= 4.1.0)

socket_select - запускает системный вызов select() на данных массивах сокетов с таймаутом, специфицированным параметрами tv_sec и tv_usec.

Описание

int socket_select (resource &read, resource &write, resource &except, int tv_sec [, int tv_usec])

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

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

socket_select() принимает массивы сокетов и ожидает их для изменения статуса. Сокеты, приходящие из BSD, будут распознаваться как так называемые наборы дескрипторов файлов. Ожидаются три массива ресурсов сокетов.

Сокеты массива read будут ожидаться, чтобы просмотреть, становятся ли символы доступными для чтения (точнее, чтобы просмотреть, не будет ли блокировано чтение; ресурс сокета готов также и в end-of-file, и в этом случае socket_read() возвратит строку нулевой длины).

Сокеты из массива write будут ожидаться, чтобы просмотреть, не будет блокировано ли чтение.

Сокеты из массива except ожидаются для исключений.

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

При выходе эти массивы модифицируются для указания на то, какой ресурс сокета фактически изменил статус.

Вам не нужно передавать каждый массив в socket_select(). Вместо них вы можете использовать пустой массив или NULL. Не забывайте также, что эти массивы передаются по сылке и будут модифицированы после возвращения из socket_select().

Пример:
/* Подготовить read-массив */
$read = array($socket1, $socket2);

if (false === ($num_changed_sockets = socket_select($read, $write = NULL, $except = NULL, 0)))
{
    /* Обработка ошибок */
else if ($num_changed_sockets > 0) {
    /* Как минимум в одном из сокетов произойдёт что-нибудь интересное */
}

Примечание: из-за ограничений в текущей Zend-машине невозможно передавать константный модификатор вроде NULL непосредственно как параметр функции, которая ожидает этот параметр, передаваемый по ссылке. В этом случае можно использовать временную переменную или выражение с самым левым членом - временной переменной:

socket_select($r, $w, $e = NULL, 0);

Параметры tv_sec и tv_usec - оба из параметра timeout. Этот timeout является верхней границей времени, прошедшего до возврата из socket_select(). tv_sec может быть 0, вызывая немедленный возврат из socket_select(). Это используется для пулов. Если tv_sec равен NULL (нет таймаута), socket_select() может блокировать бесконечно.

При успехе socket_select() возвращает количество ресурсов сокетов, содержащихся в модифицированных массивах, которое может быть равно 0, если timeout истёк до возникновения чего-нибудь интересного. При ошибке возвращается FALSE. Код ошибки можно запросить функцией socket_last_error().

Примечание: обязательно используйте операцию === при проверке на наличие ошибок. Поскольку socket_select() может возвратить 0, сравнение с помощью == вычислится в TRUE:

if (false === socket_select($r, $w, $e = NULL, 0)) {
    echo "socket_select() failed, reason: " . socket_strerror(socket_last_error()) . "
";
}

Примечание: помните, что некоторые реализации сокетов должны обрабатываться предельно осторожно. Вот некоторые основные правила:

  • Вы всегда должны пытаться использовать socket_select() без таймаута. Ваша программа ничего не должна делать, если доступных данных нет. Код, зависящий от таймаута плохо переносится и труден для отладки.

  • Никакие ресурсы сокетов не должны добавляться в какой-либо набор, если вы не предполагаете проверять их результаты после вызова socket_select() и соответственно реагировать. После возврата из socket_select(), все ресурсы сокетов во всех массивах обязательно должны проверяться. В любой ресурс сокета, доступный для записи, должна выполняться запись, а из любого ресурса сокета, доступного для чтения, должно выполняться чтение.

  • Если вы read/write в массивы, возвращаемые сокетом, имейте в виду, что они не обязательно read/write полный объём данных, запрошенный вами. Будьте готовы даже к чтению/записи единственного байта.

  • Для многих реализаций сокетов является обычным то, что только исключение, отлавливаемое массивом except, является out-of-bound-данными, полученными на сокете.

См. также socket_read(), socket_write(), socket_last_error() и socket_strerror().




Другие функции на s:

sem_acquire
sem_release
serialize
sesam_affected_rows
sesam_commit
sesam_connect
sesam_diagnostic
sesam_execimm
sesam_fetch_array
sesam_fetch_result
sesam_num_fields
sesam_query
session_cache_expire
session_cache_limiter
session_decode
session_encode
session_get_cookie_params
session_id
session_is_registered
session_name
session_save_path
session_set_save_handler
session_start
session_unregister
session_write_close
setcookie
settype
set_file_buffer
set_time_limit
shmop_open
shmop_read
shmop_size
shm_attach
shm_detach
shm_get_var
shm_remove_var
show_source
similar_text
sinh
sleep
snmprealwalk
snmpwalkoid
snmp_set_quick_print
socket_accept
socket_bind
socket_close
socket_connect
socket_create_listen
socket_create_pair
socket_getsockname
socket_iovec_add
socket_iovec_set
socket_last_error
socket_listen
socket_read
socket_readv
socket_send
socket_sendmsg
socket_sendto
socket_set_option
socket_shutdown
socket_strerror
socket_writev
sort
soundex
split
spliti
sprintf
sql_regcase
sqrt
srand
sscanf
stat
strcspn
strftime
stripcslashes
strip_tags
stristr
strlen
strnatcasecmp
strnatcmp
strpos
strrpos
strspn
strstr
strtolower
strtotime
strtr
strval
str_repeat
substr
substr_replace
SWFAction
SWFBitmap->getHeight
SWFBitmap->getWidth
SWFbutton->addAction
SWFbutton->addShape
SWFbutton->setAction
SWFbutton->setOver
SWFbutton->setUp
swfbutton_keypress
SWFDisplayItem->addColor
SWFDisplayItem->move
SWFDisplayItem->moveTo
SWFDisplayItem->Rotate
SWFDisplayItem->rotateTo
SWFDisplayItem->scale
SWFDisplayItem->scaleTo
SWFDisplayItem->setDepth
SWFDisplayItem->setRatio
SWFDisplayItem->skewX
SWFDisplayItem->skewXTo
SWFDisplayItem->skewY
SWFFill->skewXTo
SWFFont
swffont->getwidth
SWFGradient->addEntry
SWFMorph
SWFMorph->getshape1
SWFMorph->getshape2
SWFMovie
SWFMovie->nextframe
SWFMovie->setbackground
SWFShape
SWFShape->drawLine
SWFShape->drawLineTo
SWFShape->movePenTo
SWFShape->setLine
SWFSprite
SWFSprite->nextframe
SWFSprite->setframes
SWFText->addString
SWFText->getWidth
SWFText->setFont
SWFTextField
SWFTextField->align
SWFTextField->setbounds
SWFTextField->setcolor
SWFTextField->setFont
SWFTextField->setHeight
SWFTextField->setindentation
SWFTextField->setLeftMargin
SWFTextField->setMargins
SWFTextField->setname
swf_actiongotoframe
swf_actionnextframe
swf_actionplay
swf_actionprevframe
swf_actionsettarget
swf_actiontogglequality
swf_actionwaitforframe
swf_addbuttonrecord
swf_addcolor
swf_definebitmap
swf_defineline
swf_definepoly
swf_definetext
swf_endbutton
swf_endsymbol
swf_fontslant
swf_getfontinfo
swf_labelframe
swf_modifyobject
swf_mulcolor
swf_nextid
swf_openfile
swf_ortho2
swf_perspective
swf_placeobject
swf_polarview
swf_popmatrix
swf_removeobject
swf_scale
swf_setfont
swf_setframe
swf_shapearc
swf_shapecurveto
swf_shapefillbitmaptile
swf_shapefilloff
swf_shapelineto
swf_shapemoveto
swf_startdoaction
swf_startshape
swf_startsymbol
swf_textwidth
swf_translate
swf_viewport
sybase_affected_rows
sybase_close
sybase_fetch_array
sybase_fetch_field
sybase_fetch_object
sybase_fetch_row
sybase_field_seek
sybase_min_error_severity
sybase_min_server_severity
sybase_num_fields
sybase_num_rows
sybase_query
symlink
syslog
system


EXPERTGS.ru описание функций php.