|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Vitali Brusentsev 2:5020/400 23 Feb 2001 14:53:09 To : All Subject : Sockets & proxy --------------------------------------------------------------------------------
Hi, All!
В порядке изучения сокетов написал прогу, позаимствовав часть кода из
ActiveState доков по оным. Платформа - вынь.
Сразу скажу, что perldoc Socket и знание WinSock не помогли :)
Прога должна быть "изучающим протокол" proxy-сервером HTTP, то есть получать
запрос
и выводить его на экран. Тестирую браузером.
Вот, собственно, текст:
===========================================================================
use strict;
use Socket;
use Carp;
my $EOL = "\015\012";
sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n" }
my $port = 8080;
my $proto = getprotobyname('tcp');
socket(Server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
bind(Server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
listen(Server,SOMAXCONN) || die "listen: $!";
logmsg "server started on port $port";
my $paddr;
for ( ;$paddr = accept(Client,Server); close Client)
{
my($port,$iaddr) = sockaddr_in($paddr);
my $name = gethostbyaddr($iaddr,AF_INET);
logmsg "connection from $name [",inet_ntoa($iaddr), "]at port $port";
my @query = <Client>;
print @query;
print Client "HTTP/1.0 200 Ok\n";
print Client "Content-type: text/html\n\n";
print Client "<html><body><h1>Hello there, it's now ", scalar localtime,
$EOL;
print Client "</body></html>$EOL";
}
===========================================================================
Сообщение о коннекте выводится, а запрос не виден. Как из этих сокетов
читать-то?
Может, recv()?
Еще вопрос: здесь о многопоточности, как видно, речи не идет.
Что произойдет, если в процессе выполнения тела for() будут еще коннекты?
--- ifmail v.2.15dev5
* Origin: ICC Express InterNetNews site (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/11943d12389da.html, оценка из 5, голосов 10
|