Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Perl non blocked socket

Ответить
Настройки темы
Perl non blocked socket

Аватара для lcat

линуксоид


Сообщения: 189
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#!/usr/bin/perl -w
use strict;
use IO::Socket;
use IO::Select;
use constant LBUFF => 2048;
$|=1;
my($pid,@read,$buffer,$fh,$count);
my $port = shift || 45012;
$SIG{'ALRM'} = sub { exit(1); };
my $socket = IO::Socket::INET->new(LocalPort => $port,
                                   Listen => 5,
				 ReuseAddr => 1,
                                   Proto => 'tcp',
                                   Timeout => 30);
print "Listen ".$socket->sockhost.":".$socket->sockport."\n";
my $session=$socket->accept || die("$!");
syswrite(STDOUT,"to: ".$session->sockhost.":".$session->sockport. " from: ".$session->peerhost.":".$session->peerport."\n");
my $s=IO::Select->new() || die("Can't create Select obj : $!");
$s->add(\*STDIN);
$s->add($session);
STDIN->blocking(0);
$session->blocking(0);
while(1){
	@read=$s->can_read();
	foreach $fh(@read){
		if($fh == \*STDIN){
			while(my $count=sysread(STDIN,$buffer,LBUFF)){
# 				syswrite(STDOUT,"STDIN\n");
				syswrite($session,$buffer);
			}
		}
		if($fh == $session){
			while($count=sysread($session,$buffer,LBUFF)){
				syswrite(STDOUT,$count."\n");
				syswrite(STDOUT,$buffer);
				unless(defined($count) && length($buffer)){
					$s->remove($session);
					$session->shutdown(2);
					exit(1);
				}
			}
		}
		syswrite(STDOUT,"EXIT\n");
	}
}
Как отловить закрытие сокета другой стороной, Участок кода
Код: Выделить весь код
unless(defined($count) && length($buffer)){
					$s->remove($session);
					$session->shutdown(2);
					exit(1);
				}
Как я понимаю должен это делать но ничего не работает, посоветуйте как исправить

-------
slackware 13 www.slackware.com LPIC-1


Отправлено: 01:16, 09-02-2009

 


Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Perl non blocked socket

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Можно ли на материнку с Socket AM2 установить процессор с Socket AM2+? flev45 Материнские платы и память 7 04-12-2009 16:39
V. 5.5/2000/2003 - Exchange 2003 - smtp;550 Blocked. vicwanderer Microsoft Exchange Server 0 15-04-2009 18:41
Доступ - Как разблокировать blocked startup programs Moor Microsoft Windows Vista 1 11-01-2008 13:28
FreeBSD 5.3 Perl не видит локали, а KDE при сборке не видит perl :o mar Общий по FreeBSD 8 06-05-2005 13:13
Че такое Socket ??? Garnett Хочу все знать 7 25-07-2003 16:44




 
Переход