McMahon, Christopher x66156 wrote:
> I think I'm missing a concept here...
> I built a very simple TCP/IP server like the one on p. 441 of the
> Camel book.
> But my server only ever sees the first message from any given
> client. Subsequent messages to my server are ignored. Does anyone
> know what I have to do to get my server to handle more than one
> message?
>
> #!/usr/bin/perl
> use warnings;
> use strict;
> my ($server, $server_port, $client, $input);
>
> use IO::Socket::INET;
>
> $server_port = 33000;
>
> $server = IO::Socket::INET->new (LocalPort => $server_port,
> Type => SOCK_STREAM,
> Reuse => 1,
> Listen => 10 ) #or SOMAXCONN
> or die "Couldn't be a TCP server on port
> $server_port: $! \n";
>
> while ($client = $server->accept()) {
> my $n = sysread($client,$input,1000);
> print "$input\n" ;
Well, you're only calling sysread() once for each client and then going back
to call accept() to get the next client connection. You need to read in a
loop if you want to get all the client's input:
print while <$client>;
But, your server can only handle one client at a time. The kernel will queue
up additional clients (up to 10) as they connect, but they will be blocked
until the server gets around to them. You should investigate a forking
server. There's a (rather lengthy) example in perldoc perlipc.
> next; #THIS DOESN'T HELP
> }
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]