The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"use IO::Socket - Определить что сокет прикрыт с другой сторо..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"use IO::Socket - Определить что сокет прикрыт с другой сторо..." 
Сообщение от exec Искать по авторуВ закладки(ok) on 04-Ноя-05, 20:28  (MSK)
Есть:

use IO::Socket;

$SET_port=4141;
$bind=IO::Socket::INET->new(Listen=>5,Reuse=>1,LocalPort=>$SET_port);

while($client=$bind->accept()) {
unless(fork()){
$client->recv($data,2048);
[здесь идёт обработка полученных данных]
while (1){
[здесь мы генерируем новые данные, кои будем передавать]
if (__ЧТО?__){$client->send($la_la_rezult);}else{&zacehlit(); exit;}
} # while (1)
} # unless(fork())
} # while($client=$bind->accept())


Суть задачи - определить, что клиент зацепившийся открытый порт (в данном случае 4141) ещё не закрыл соединение, перед тем как передавать ему данные и если прикрыл, то вызвать "zacehlit()".
То есть что должно быть вместо "__ЧТО?__"?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]

1. "use IO::Socket - Определить что сокет прикрыт с другой сторо..." 
Сообщение от exec Искать по авторуВ закладки(ok) on 05-Ноя-05, 15:30  (MSK)
Перечитал man IO::Socket и увидел:

if ($client->connected){$client->send($la_la_rezult);}else{&zacehlit(); exit;}

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "use IO::Socket - Определить что сокет прикрыт с другой сторо..." 
Сообщение от mthawk emailИскать по авторуВ закладки(ok) on 09-Ноя-05, 13:04  (MSK)
>Перечитал man IO::Socket и увидел:
>
>if ($client->connected){$client->send($la_la_rezult);}else{&zacehlit(); exit;}

Ну и что?
помогло?

Я в свое время писал сетевой демон на перле. И стояла анологичная задача.
Eсли другая сторона сокета закрывала его инструкцией close - все шоколадно отлавливалось на другой стороне (я это реализовал через обработку ошибки, возвращаемой функцией read()).
Но если связь рвалась (неполадки сети etc...) обе стороны думали, что соке жив и могли писать  и читать в(из) мертвого сокета.
Минут через 20 - 30 (я так понял системный тайм-аут, но изменить его так и узнал где) обе стороны что называется "отдуплялись" что сокета нет....
Решил плоблему банальной "перепиновкой" на уровне приложения.
Работает. Год уже.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру