Код: Выделить всё
#!/usr/bin/perl
use Socket;
use constant POP3PORT => 110;
my $timeout=120;
my $proto = getprotobyname('tcp');
my $port =110;
socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
bind(SOCK, sockaddr_in(POP3PORT, INADDR_ANY)) || die "bind: $!";
listen(SOCK, SOMAXCONN) || die "listen: $!";
my $auth=0;
my $i=0;
while(!$auth)
{
accept (NEWSOCK,SOCK);
if($i==0)
{
print 'test';
print NEWSOCK "+OK POP3 server ready\r\n";
close NEWSOCK;
$i=1;
next;
}
my $authline=<NEWSOCK>;
print $authline;
if ( $authline =~ /USER\s+(.*)/i ) {
$user_input = lc( $1 );
$user_input =~ s/[\/\\\0|\n\r]//g;
$user=$1;
print NEWSOCK "+OK Please give password.\r\n";
$username_given = 1;
}
elsif ( $authline =~ /PASS\s+(.*)$/i && $username_given )
{
$pass = $1;
$pass =~ s/[\n\r]//g;
if($user_input eq '123' && $pass eq '123')
{
$auth=1;
print NEWSOCK "+OK Pass accepted";
}
}
else
{
#print 'test';
# print NEWSOCK "+OK POP3 server ready\r\n";
}
$i=1;
close NEWSOCK;
#
}
close(SOCK);при вызове close NEWSOCK; закрывается соединение с клиентом, а без него в сокет не пишет. Как можно писать в сокет не закрывая его?