作者albertliao (~咖啡瘾君子~)
看板Perl
标题Re: [问题]请教各位server的问题
时间Wed Jun 24 20:31:37 2009
※ 引述《albertliao (~咖啡瘾君子~)》之铭言:
: 各位好小弟目前使用socket遇到一个问题 , 以下是我的程式码,
: 可以看得来我目前只有要接收 client的msg , 但每次从client接收到的msg都是空的,而且之後
: 就一直执行不断的印出recv :变成无线回圈(select变成没有作用!!) , 请教各位我目前是要不断接收
: 来自client的讯息而已, 请问是不是哪有写错要注意的地方
: 谢谢
: $Socket = new IO::Socket::INET->new(LocalAddr => 'localhost',
: LocalPort => 111,
: Listen => SOMAXCONN,
: Proto => 'tcp',
: Reuse => 1
: ) or die "Can't bind : $@\n";
: $s = new IO::Select($Socket);
: $i=1;
: while($i)
: {
: if( $s->can_read )
: {
: $Socket->recv($text,512);
: print "recv : $text\n";
: # $i=0;
: }
: }
感谢各位热心的协助 , 目前server问题已解决 , 但我仍然无法使用select
去限定在某个时间内未收到msg就断线 , 程式如下 , 请各位指点
感谢大家
while( $client=$Socket->accept() )
{
print "Accepting connection from ", $client->peerhost(), ".\n";
print $client "Welcome it from Ix_Agent\n";
#$t1 = threads->create(\&fun_recv);
$s = new IO::Select($client);
$i=1;
$timeout=5;
while($i)
{
if($s->can_read($timeout)) #这行似乎无效果
{
while ( $_ = <$client> )
{
chomp;
print "\tClient request: $_\n";
}
}
else
{$i=0; print "error occur\n";}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.87.82.195
1F:推 LiloHuang:找台linux测测看 windows应该不行 06/24 22:47
2F:推 LiloHuang:印象中是这样 不然就自己写 select() 硬干 06/24 22:47
3F:→ albertliao:请教一下这个为什麽跟OS有关 谢谢 06/25 09:55
4F:推 LiloHuang:我只是猜测他的 timeout 会不会用 SIG_ALRM 实做^^" 06/25 19:01
5F:推 LiloHuang:所以请你换 linux 测试看看罗 06/25 19:01