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.
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.
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.