|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Yuriy Kaminskiy 2:5020/517.21 19 Nov 2001 03:11:18 To : Alexander Lunkov Subject : Re: В чём трабла? -------------------------------------------------------------------------------- >>>>> On 21:55 16/11/2001, Alexander Lunkov <2:5055/201.26> writes: AL> use Socket qw(AF_INET SOCK_STREAM inet_aton sockaddr_in); AL> $host = 'localhost'; $port = 80; $buf=""; AL> $ip_addr = inet_aton $host or die "unknown remote host: $host\n"; AL> socket $self, AF_INET, SOCK_STREAM, 0 or die "problem creating AL> socket: $!\n"; connect $self, sockaddr_in($port, $ip_addr) or die AL> "problem connecting to \"$host\", port $port: $!\n"; print $self AL> "GET /Z HTTP/1.0\n"; AL> #вот до сюда всё ок! зависает на включенном select или read, если AL> select выкл. Hу. А ты как хотел? Сервер ждет второго \n, ты ждешь ответа сервера. Hормальный такой deadlock :) И еще полезно после print сказать use IO::Handle; $socket->flush(); AL> #select($self); Эта, perldoc -f select до осознания разницы между select($handle) и select($rdmask,$wrmask,$exmask,$timeout). [BTW, и обрати особое внимание - select-с-четырьмя-аргументами _несовместим_ с print/read/<> - с ним можно использовать только sysread/syswrite!] AL> read $self, $buf, 5; print $buf; close; AL> зыж только что попробовал: если вместо read $self, $buf, 5; AL> написать accept $self, $buf;, то вылезает: accept() on unopened AL> socket at 4.pl line 17. Разумеется. accept и должен ругаться на любой сокет, который не был bound by bind(2), and listening for connection after listen(2). man 2 accept bind listen connect до просветления. AL> К line 17 не придирайтесь, т.к. в запускаемом скрипте есть AL> комментарии. -- Yuriy Kaminskiy. --- Gnus v5.2.25/XEmacs 19.14 * Origin: none (2:5020/517.21@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/174270004d5ab.html, оценка из 5, голосов 10
|