NAME
UV::UDP - UDP socket handles in libuv
SYNOPSIS
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
# A new socket handle will be initialised against the default loop
my $udp = UV::UDP->new;
$udp->connect(pack_sockaddr_in(1234, inet_aton("127.0.0.1"));
$udp->send("Hello, server!\n");
# set up the data recv callback
$udp->on(recv => sub {
my ($self, $err, $buf) = @_;
say "More data: $buf";
});
$udp->recv_start();
DESCRIPTION
This module provides an interface to libuv's UDP handle.
EVENTS
UV::UDP makes the following extra events available.
recv
$udp->on("recv", sub {
my ($self, $status, $buf, $addr) = @_;
say "Received more data: <$buf>";
});
The recv callback fires whenever a datagram is received on the socket to be passed to the application.
METHODS
UV::UDP inherits all methods from UV::Handle and also makes the following extra methods available.
open
$udp->open($fh);
The open method associates the UDP handle with an existing filehandle already opened by the process.
Note that this method is not currently supported on Windows, because libuv would want overlapped IO (created by WSA_FLAG_OVERLAPPED
), but Perl does not create such sockets.
See also https://github.com/p5-UV/p5-UV/issues/38.
bind
$udp->bind($addr);
The bind method associates the UDP socket with the given local address.
connect
$udp->connect($addr);
The connect method associates the UDP socket with the given remote address.
getpeername
my $addr = $udp->getpeername;
The getpeername method returns a packed sockaddr string containing the remote address with which this UDP handle is associated.
getsockname
my $addr = $udp->getsockname;
The getsockname method returns a packed sockaddr string containing the local address with which this UDP handle is associated.
recv_start
$udp->recv_start;
The recv_start method starts the receiving side of the UDP socket handle. The recv
event callback will be invoked whenever there is new data to be given to the application.
Returns the $udp
instance itself.
recv_stop
$udp->recv_stop;
The recv_stop method stops the receiving side of the stream handle.
send
$udp->send($s, sub {
say "Data has now been sent";
});
The send method sends another datagram to the peer. The callback argument will be invoked when it has been flushed to the filehandle.
$udp->send($s, $addr, sub { ... });
Optionally additionally a destination address can be provided, for use with unconnected UDP sockets.
try_send
$udp->try_send($s);
$udp->try_send($s, $addr);
The try_send method behaves similarly to "send" but will fail with UV_EAGAIN
if it cannot send the data immediately, rather than enqueing for later.
set_broadcast
$udp->set_broadcast($on);
The set_broadcast method turns broadcast on or off.
set_ttl
$udp->set_ttl($ttl);
The set_ttl method sets the time-to-live of transmitted packets.
set_multicast_loop
$udp->set_multicast_loop($on);
The set_multicast_loop method turns the multicast loopback flag on or off.
set_multicast_ttl
$udp->set_multicast_ttl($ttl);
The set_multicast_ttl method sets the time-to-live of transmitted multicast packets.
set_multicast_interface
$udp->set_multicast_interface($ifaddr);
The set_multicast_interface method sets the interface address to send or receive data on. The interface address is specified in a plain byte string.
set_membership
$udp->set_membership($mcaddr, $ifaddr, $membership);
The set_membership method joins or leaves a multicast group. $membership
should be one of the exported constants UV_JOIN_GROUP
or UV_LEAVE_GROUP
. The group and interface addresses are specified in plain byte strings.
set_source_membership
$udp->set_source_membership($mcaddr, $ifaddr, $srcaddr, $membership);
The set_source_membership method joins or leaves a source-specific multicast group. $membership
should be one of the exported constants UV_JOIN_GROUP
or UV_LEAVE_GROUP
. The group, interface, and source addresses are specified in plain byte strings.
get_send_queue_size
get_send_queue_count
$size = $udp->get_send_queue_size;
$count = $udp->get_send_queue_count;
Returns the total size and current count of items in the send queue.
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.