Sockety

Petr Sturc sturc na fzu.cz
Úterý Leden 11 07:48:53 MET 2000


On 10 Jan 2000 23:31:01 +0100, Martin Caslavsky <mcaslavsky na macroware.cz> wrote:
>zkousel jsem si hrani se sockety podle Programovani v perl pro pokrocile,
>kde je takovyhle server
>
>use IO::Socket;
>$sock = new IO::Socket::INET("LocalHost" => "localhost", LocalPort => 5000,
>Proto => "tcp", Listen => 5, Reuse => 1)
> or die "Cant create socket: $!\n";
>while ($new_sock = $sock->accept()) {
> while(defined ($buf = <$new_sock>) and ($buf !~ /QUIT/)) {
>  print $buf;
> }
>}
>close $sock;
----------------CUT-------------------
>Server naopak slape pekne, kdyz se k nemu pripojim telnetem. Jsem ale trosku
>na rozpacich, protoze kdyz do okna s klientem napisu QUIT, tak nenapise nic
>jako "Connection closed by foregin host", jenom se text vepisovany do okna
>klienta prestane zobrazovat v okne serveru a ta hlaska, co bych chtel
>slyset, se mi objevi, az kdyz na serveru dam ctrl+c. Je to takhle v poradku,
>ze close $sock klienta neodpoji? Da se klient nejak "natvrdo" odpojit? (krom
>vytahnuti kablu :)))

Nejsem moc honenej v programovani socketu, ale rekl bych, ze
po napsani QUIT pouze skonci vnitni while smycka a server
ceka na dalsi spojeni v accept, tedy k uzavreni socketu
nedojde. Asi by v tom cyklu melo byt neco jako

 while(defined ($buf = <$new_sock>)) {
  if ( $buf!~/QUIT/ ){
    print $buf;
  } else {
    close $new_sock;
  }
 }


>Martin Caslavsky

Zdravi Petr Sturc

--
Petr Sturc <sturc na fzu.cz>   http://www.fzu.cz/~sturc/
Dept. of Magnetism, Institute of Physics ASCR, Prague,Czech Rep.


Další informace o konferenci Perl