Socket::Mmsg - Perl extension for recvmmsg and sendmmsg Linux syscalls
#!/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"; }
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.
Socket::Mmsg
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] ... ];
Receive NUMBER_OF_MSG from specified SOCKET. Return $array_ref with recieved messages in format :
Syscall is running with MSG_WAITFORONE flag.
c<Socket::Mmsg> exports sendmmsg and recvmmsg by default into the caller's namespace.
Vladimir Krasulia hithim@cpan.org
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.
To install Socket::Mmsg, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Socket::Mmsg
CPAN shell
perl -MCPAN -e shell install Socket::Mmsg
For more information on module installation, please visit the detailed CPAN module installation guide.