Seeing the expression 'non-blocking' immediately makes me think POE.
This is a simple Echo server using POE::Kernel and POE::Wheel::SocketFactory :
use strict; use warnings; use POE; use POE::Wheel::SocketFactory; use Socket; POE::Session->create( package_states => [ 'main' => [ qw(_start _sock_up _sock_err _sock_read) ], ], ); $poe_kernel->run(); exit 0; sub _start { my ($kernel,$heap) = @_[KERNEL,HEAP]; $heap->{factory} = POE::Wheel::SocketFactory->new( SocketProtocol => 'udp', BindPort => 9090, SuccessEvent => '_sock_up', FailureEvent => '_sock_err', ); return; } sub _sock_up { my ($kernel,$heap,$socket) = @_[KERNEL,HEAP,ARG0]; delete $heap->{factory}; $kernel->select_read( $socket, '_sock_read' ); return; } sub _sock_err { my ($heap,$op,$errno,$errstr) = @_[HEAP,ARG0..ARG2]; delete $heap->{factory}; warn "$op $errno $errstr\n"; return; } sub _sock_read { my ($kernel,$socket) = @_[KERNEL,ARG0]; my $remote_address = recv( $socket, my $message = "", 1024, 0 ); return unless defined $remote_address; send( $socket, $message, 0, $remote_address ) == length($message) or warn "Trouble sending response: $!"; return; }
There are many examples in the POE Cookbook
In reply to Re: nonblocking UDP, "Hello World" level
by bingos
in thread nonblocking UDP, "Hello World" level
by Bruce32903
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |