다목적 소프트웨어 웹 서버
임베디드 웹 서버
Perl로 최소 기능 웹 서버를 구현해보자.
#!/usr/bin/perl
use Socket;
use Carp;
use FileHandle;
# (1) use port 8080 by default, unless overridden on command line
$port = (@ARGV ? $ARGV[0] : 8080);
# (2) create local TCP socket and set it to listen for connections
$proto = getprotobyname('tcp');
socket(S, PF_INET, SOCK_STREAM, $proto) die;
setsockopt(S, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) die;
bind(S, sockaddr_in($port, INADDR_ANY)) die;
listen(S, SOMAXCONN) die;
# (3) print a startup message
printf(" <<<Type-O-Serve Accepting on Port %d>>>\\n\\n",$port);
while (1)
{
# (4) wait for a connection C
$cport_caddr = accept(C, S);
($cport,$caddr) = sockaddr_in($cport_caddr);
C->autoflush(1);
# (5) print who the connection is from
$cname = gethostbyaddr($caddr,AF_INET);
printf(" <<<Request From '%s'>>>\\n",$cname);
# (6) read request msg until blank line, and print on screen
while ($line = <C>)
{
print $line;
if ($line =~ /^\\r/) { last; }
}
# (7) prompt for response message, and input response lines,
# sending response lines to client, until solitary "."
printf(" <<<Type Response Followed by '.'>>>\\n");
while ($line = <STDIN>)
{
$line =~ s/\\r//;
$line =~ s/\\n//;
if ($line =~ /^\\./) { last; }
print C $line . "\\r\\n";
}
close(C);
}
% type-o-serve.pl 8080
최신식 상용 웹 서버는 앞선 예제보다 훨씬 복잡하지만, 공통적으로 몇 가지 일을 수행함.