#!/usr/bin/env perl use strict; use warnings; use IO::Socket::INET; # create a connecting socket my $peerhost = 'localhost'; my $peerport = 8000; my $socket = new IO::Socket::INET ( PeerHost => $peerhost, PeerPort => $peerport, Proto => 'tcp', ); binmode($socket, ':bytes'); $socket->blocking(0); for(my $i = 0; $i < 5; $i++) { syswrite($socket, chr($i)); sleep(2); } #### #!/usr/bin/env perl use strict; use warnings; package TestServer; use base qw(Net::Server); sub process_request { my ($self) = @_; binmode(STDIN, ':bytes'); STDIN->blocking(0); while(1) { my $buf; sysread(STDIN, $buf, 1); if(defined($buf) && length($buf)) { my $num = ord($buf); print STDERR "GOT $num\n"; last if($num == 4); } else { print STDERR "...doing something else...\n"; sleep(1); } } print STDERR "Done.\n"; } TestServer->run(port => 8000); #### 2015/04/09-10:58:23 TestServer (type Net::Server) starting! pid(7799) Resolved [*]:8000 to [::]:8000, IPv6 Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6 Binding to TCP port 8000 on host :: with IPv6 Group Not Defined. Defaulting to EGID '1000 4 20 24 27 30 46 108 124 125 130 1000' User Not Defined. Defaulting to EUID '1000' GOT 0 ...doing something else... ...doing something else... GOT 1 ...doing something else... ...doing something else... GOT 2 ...doing something else... ...doing something else... GOT 3 ...doing something else... ...doing something else... GOT 4 Done. #### yes '' | openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 10 -nodes #### #!/usr/bin/env perl use strict; use warnings; use IO::Socket::SSL; # create a connecting socket my $peerhost = 'localhost'; my $peerport = 8000; my $socket = new IO::Socket::SSL ( PeerHost => $peerhost, PeerPort => $peerport, Proto => 'tcp', SSL_verify_mode => SSL_VERIFY_NONE, ); binmode($socket, ':bytes'); $socket->blocking(0); for(my $i = 0; $i < 5; $i++) { syswrite($socket, chr($i)); sleep(2); } #### #!/usr/bin/env perl use strict; use warnings; package TestServer; use base qw(Net::Server); sub process_request { my ($self) = @_; binmode(STDIN, ':bytes'); STDIN->blocking(0); while(1) { my $buf; sysread(STDIN, $buf, 1); if(defined($buf) && length($buf)) { my $num = ord($buf); print STDERR "GOT $num\n"; last if($num == 4); } else { print STDERR "...doing something else...\n"; sleep(1); } } print STDERR "Done.\n"; } TestServer->run(port => 8000, proto => 'ssl', SSL_key_file => 'key.pem', SSL_cert_file => 'cert.pem'); #### 2015/04/09-11:04:03 TestServer (type Net::Server) starting! pid(8551) Resolved [*]:8000 to [::]:8000, IPv6 Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6 Binding to SSL port 8000 on host :: with IPv6 Group Not Defined. Defaulting to EGID '1000 4 20 24 27 30 46 108 124 125 130 1000' User Not Defined. Defaulting to EUID '1000' GOT 0 GOT 1 GOT 2 GOT 3 GOT 4 Done.