#####################3 server.pl use strict; use warnings; use diagnostics; use Time::HiRes qw(time); use IO::Socket::INET; use IO::Async::Stream; use IO::Async::Loop; my $loop = IO::Async::Loop->new(); my $server_socket = IO::Socket::INET->new( Listen => 5, ReuseAddr => 1, LocalPort => 8888, Proto => 'tcp', Blocking => 1, # This line is very important ) or die $!; $server_socket->autoflush( 1 ) or die $!; $loop->listen( handle => $server_socket, on_accept => sub { my ( $newclient ) = @_; $loop->add( IO::Async::Stream->new( handle => $newclient, on_read => sub { my ( $self, $buffref, $closed ) = @_; # $self->write( $$buffref ); warn 'READ: ', $$buffref; my $send_start = time; $newclient->send( 'ECHO: ' . $$buffref ); warn 'TIME TO SEND TO CLIENT: ', time - $send_start; $$buffref = ''; return 0; }, ), ); }, on_resolve_error => sub { print STDERR "Cannot resolve - $_[0]\n"; }, on_listen_error => sub { print STDERR "Cannot listen\n"; }, ); $loop->loop_forever();