Ошибка: ERROR SOCKET:[104] Connection reset by peer.

Tayson

Новичок
Ошибка: ERROR SOCKET:[104] Connection reset by peer.

Платформа Debian+PHP+Мускул

Сервер на неблокирующихся сокетах. Около 80 клиентов которые постоянно весят на порту. Обмен данными переодический, раз в 2 -20мин. Переодически (раз в 1 - 10 дней) стала валиться ошибка:

<b>Warning</b>: socket_write() [<a href='function.socket-write'>function.socket-write</a>]: unable to write to socket [104]: Connection reset by peer in <b>/home/qvadro/Daemon/sc4_.php</b> on line <b>82</b><br /> Posle zapisi v socet: ERROR SOCKET:[104] Connection reset by peer.

происходит это в строке:
PHP:
socket_write($this->socket, $mess, strlen($mess));
Не могу никак понять откуда эта ошибка :(. Толи что то с портом происходит толи с сокетами. Толи сам Линух порт передергивает. Система работает круглосуточно, мож какое переполнение случается ? У кого какие мысли есть ?

И еще : сколько сокетов можно нормально открывать на одном порту ?
 

Tayson

Новичок
Alexandre
Сенк, это понятно, что сокет разорвался...Не понятно почему так происходит и что делать...Можно ли каким то образом проверять состояние сокета перед записью в него ?
 

Tayson

Новичок
Так куда копать ?
Сколько реально можно сокетов вешать на 1 порт ?
 

dimagolov

Новичок
Tayson, а с чего ты решил, что это проблема у сервера, а не отваливается клиент? ты воспроизвести такую ситуацию пробовал?
 

Tayson

Новичок
За клиента уверен почти на 100%. Клиент будет ждать 20 ctr ответа. Врспроизвести тяжело - так как не постоянно это выскакивает
 

dimagolov

Новичок
Клиент будет ждать 20 ctr ответа.
то есть ты смотришь на этих клиентов, пингуешь с них сервер, клиенты "ждут" и не отваливаются, а на сервере происходит эта ошибка?

Врспроизвести тяжело - так как не постоянно это выскакивает
у тебя общение "периодическое". кто его инициирует? клиент? и сервер пытается ему послать ответ (вопрос еще с какой задержкой) и при этом получает эту ошибку?

а под воспроизвести я подразумевал просто убить клиента, сервер получит такое сообщение

да, посмотри netstat & tcpdump по интересующим портам
 

Tayson

Новичок
1.Я вижу в логе что клиент приконектился (и покаместь в лог не пропишется что он отвалился - считаю что он в конекте.)
2.Клиент посылает пакет и ждет 20 сек ответа. Если ответа нет - клиент все повторяет заново.
3.На каждый запрос клиента - сервер шлет ответ. Всегда инициатор клиент.
4.Ответ сервер шлет мгновенно (по логу всегда в туже секунду),
5.Ошибка всегда в одном месте - когда сервер пытается записать в сокет ответ клиенту. Ошибка не системная.
 
Сверху