Net::Socket::NonBlock

Net::Socket::NonBlock is a Perl extension for easy creation multi-socket single-thread application.
Download

Net::Socket::NonBlock Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Perl Artistic License
  • Price:
  • FREE
  • Publisher Name:
  • Daniel Podolsky
  • Publisher web site:
  • http://search.cpan.org/~tpaba/Net-Socket-NonBlock-0.15/NonBlock.pm

Net::Socket::NonBlock Tags


Net::Socket::NonBlock Description

Net::Socket::NonBlock is a Perl extension for easy creation multi-socket single-thread application. Net::Socket::NonBlock is a Perl extension for easy creation multi-socket single-thread application, especially non-forking TCP servers.SYNOPSIS # TCP port forwarder with logging # Works on Win32! use strict; use Net::Socket::NonBlock; $|++; my $LocalPort = shift or die "Usage: $0 n"; my $RemoteHost = shift or die "Usage: $0 n"; my $SockNest = Net::Socket::NonBlock::Nest->new(SelectT => 0.1, SilenceT => 0, debug => $^W, BuffSize => 10240, ) or die "Error creating sockets nest: $@n"; $SockNest->Listen(LocalPort => $LocalPort, Proto => 'tcp', Accept => &NewConnection, SilenceT => 0, #ClientsST => 10, Listen => 10,) or die "Could not listen on port '$LocalPort': $@n"; my %ConPool = (); while($SockNest->IO()) { my $Pstr = ''; my $ClnSock = undef; my $SrvSock = undef; while (($ClnSock, $SrvSock) = each(%ConPool)) { my $ClientID = sprintf(".15s:%-5.5s", $SockNest->PeerAddr($ClnSock), $SockNest->PeerPort($ClnSock)); my $Str = undef; while(($Str = $SockNest->Read($ClnSock)) && length($Str)) { $Pstr .= " $ClientID From CLIENT ".SafeStr($Str)."n"; $SrvSock->Puts($Str); }; if (!defined($Str)) { $Pstr .= " $ClientID CLIENT closedn"; $SockNest->Close($ClnSock); # Old-style method call $SrvSock->Close(); # OO-style method call delete($ConPool{$ClnSock}); next; }; while(($Str = $SrvSock->Read()) && length($Str)) { $Pstr .= " $ClientID From SERVER ".SafeStr($Str)."n"; $SockNest->Puts($ClnSock, $Str); }; if (!defined($Str)) { $Pstr .= " $ClientID SERVER closedn"; $SockNest->Close($ClnSock); $SrvSock->Close(); delete($ConPool{$ClnSock}); next; }; }; if (length($Pstr)) { print localtime()."n".$Pstr; }; }; sub NewConnection { my ($ClnSock) = shift or return; $ConPool{$ClnSock} = $SockNest->Connect(PeerAddr => $RemoteHost, Proto => 'tcp',); if(!$ConPool{$ClnSock}) { warn "Can not connect to '$RemoteHost': $@n"; $ClnSock->Close(); delete($ConPool{$ClnSock}); return; }; return 1; }; sub SafeStr { my $Str = shift or return '!UNDEF!'; $Str =~ s{ () } { sprintf("\x%2.2X", ord($1)) }gsex; return $Str; };Requirements:· Perl Requirements: · Perl


Net::Socket::NonBlock Related Software