NAME
Socket::Mmsg - Perl extension for recvmmsg and sendmmsg Linux syscalls
SYNOPSIS
#!/usr/bin/perl use strict; use Socket; use Socket::Mmsg;
### Creating sending udp socket my $snd_sock; socket($snd_sock, PF_INET, SOCK_DGRAM, getprotobyname('udp'));
### Generating array of messages for sendmmsg my $msg_array = []; foreach (1..8){ push @$msg_array , [(pack_sockaddr_in('9999', INADDR_LOOPBACK)), 'Hello number:'.$_] }
### Creating receiving udp socket my $recv_sock; socket($recv_sock, PF_INET, SOCK_DGRAM, getprotobyname('udp')); bind ($recv_sock, sockaddr_in('9999', INADDR_LOOPBACK));
### Send all messages in one syscall my $snt_msg = &sendmmsg($snd_sock,$msg_array); print "Sent messages: $snt_msg\n";
### Receive all messages in one syscall my $recv_buffer = &recvmmsg($recv_sock, 8, 1000, 1); print "Recieved messages: ".scalar @$recv_buffer."\n";
### Print received messages foreach my $pkt(@$recv_buffer){ my ($port,$ip) = sockaddr_in($pkt->[0]); print $pkt->[1].' from:'.inet_ntoa($ip).':'.$port."\n"; }
DESCRIPTION
Socket::Mmsg
- Is wrapper around two Linux-specific syscalls : recvmmsg and sendmmsg. Basically it was made for using in gather-type scripts (like snmp requests on huge number of devices), for more info you can read man pages of recvmmsg(2) and sendmmsg(2) syscalls.
FUNCTIONS
- sendmmsg SOCKET, MSG_ARRAY_REF
-
Send all messages from specified array reference to specified socket. Returns number of sent messages and removes sent messages from array. Number of sent messages is limited by UIO_MAXIOV (for linux is 1024). Structure of array is :
$array_ref = [ [sockaddr_in(), $message_string] ... ];
- recvmmsg SOCKET, NUMBER_OF_MSG, BUFFER_FOR_EACH_MSG, TIMEOUT_FLOAT
-
Receive NUMBER_OF_MSG from specified SOCKET. Return $array_ref with recieved messages in format :
$array_ref = [ [sockaddr_in(), $message_string] ... ];
Syscall is running with MSG_WAITFORONE flag.
EXPORT
c<Socket::Mmsg> exports sendmmsg and recvmmsg by default into the caller's namespace.
SEE ALSO
AUTHOR
Vladimir Krasulia hithim@cpan.org
COPYRIGHT AND LICENSE
Copyright (C) 2013 by Vladimir Krasulya
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or, at your option, any later version of Perl 5 you may have available.