Hi Andre Muench -
At 2005-11-19, 18:55:13 you wrote:
>Hi,
>
>I have a Problem with blocking INET reading. I created a socket and wait
>till a client connect to it. But no matter what I do, whenever I try to
>read from the socket, it blocks. I tried $Client->blocking(0), but it
>seems to have no effect. I tested it under Win2000 with Perl 5.6.1. Does
>anyone kown how I can solve this problem?
>
>Code:
>
>$Socket = IO::Socket::INET->new(
> LocalPort => '25022',
> Proto => 'tcp',
> Listen => 10,
> Timeout => 1,
> Type => SOCK_STREAM,
> Reuse => 1
> ) or die $!;
>
>until($Client = $Socket->accept()) {}
>
>
>$Client->blocking(0);
># The next statment shouldnt block, but it does !!!
>$Input = <$Client>;
>$Client->blocking(1);
>
>Later in the program I need the blocking. Has this anything to do with
>Perl or Windows Version, I have problems with sockets under Win NT 4.0
>too, but on the Client side ( but this is another story ).
>
>Andre
>
See if IO::Select works for you. The following example is straight
from the IO::Select manpage - I haven't tried to see if it applies to
your problem or not:
"Here is a short example which shows how IO::Select could be used to write a
server which communicates with several sockets while also listening for more
connections on a listen socket
use IO::Select;
use IO::Socket;
$lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
$sel = new IO::Select( $lsn );
while(@ready = $sel->can_read) {
foreach $fh (@ready) {
if($fh == $lsn) {
# Create a new socket
$new = $lsn->accept;
$sel->add($new);
}
else {
# Process socket
# Maybe we have finished with the socket
$sel->remove($fh);
$fh->close;
}
}
}
"
Aloha => Beau;
[EMAIL PROTECTED]
2005-11-20
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>