Упавшие юзеры в Socket Server

hungry

Guest
Упавшие юзеры в Socket Server

Имеется Socket Server, написанный на PHP

Ситуация: клиент завешает соединение - автоматом посылает серверу пакет нулевой длинны:

$bytes=@socket_recv($socket, $buffer, 2048, 0);
if ($bytes == 0) {
отключаем его
}

Но если у юзера пропало соединение с интернетом, то естесвенно ничего посылать он не будет.

Как выловить такого юзера, что связь с ним пропала... ?
 

hungry

Guest
Как вообще проверить ? отключился ли уже юзер или нет ?...
 

hungry

Guest
А выставить то тайм-аут как то можно ?... Думаю какой то выход все равно есть...
 

fixxxer

К.О.
Партнер клуба
>А выставить то тайм-аут как то можно ?

Ахха.
[m]socket_set_option[/m]
 

tristram

Guest
это можно наблюдать на примере irc-сетей :) там ping timeout exceed....
 

fixxxer

К.О.
Партнер клуба
аналогия не совсем корректная =) в irc-сетях эта проблема решается отправкой клиенту строки PING xxxx (xxxx - случайное число, но похоже что на самом деле текущий timespamp); клиент должен соответственно отправить PONG xxxx, иначе его через некоторое время слетят.
 

hungry

Guest
На самом деле заметил что мнут через 10 клиента на самом деле скидывают :)
Пробовал

socket_set_option(
$socket,
SOL_SOCKET, // socket level
SO_SNDTIMEO, // timeout option
array(
"sec"=>10, // Timeout in seconds
"usec"=>0 // I assume timeout in microseconds
)
);
Ничего не изменилось... Ну пока и 10 минут - неплохо, лишь бы не зависал :) Если кто то найдет способ уменьшить тайм-аут - пишите!
 
Сверху