The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Linux::Perl::sendmsg

SYNOPSIS

    my $bytes = Linux::Perl::sendmsg->sendmsg(
        fd => $fd,
        name => $name,
        iovec => [ \$str1, \$str2, .. ],
        control => [ $level, $type, $data ],
        flags => \@flags,
    );

You can alternatively use your platform-specific module, e.g., Linux::Perl::sendmsg::x86_64.

DESCRIPTION

This module provides a Linux-specific sendmsg() implementation. See man 2 sendmsg for what this can do differently from send() and sendto.

METHODS

$bytes = CLASS->sendmsg( %OPTS )

If EAGAIN/EWOULDBLOCK is encountered, undef is returned.

%OPTS correspond to the system call arguments:

  • fd

  • name - irrelevant for connected sockets

  • iovec - Optional, a reference to an array of string references

  • control - Optional, a reference to an array of: $LEVEL, $TYPE, $DATA. See below for examples. If you don’t use this, you might as well use Perl’s send() built-in.

  • flags - Optional, a reference to an array of any/all of: CONFIRM, DONTROUTE, DONTWAIT, EOR, MORE, NOSIGNAL, OOB.

CONTROL EXAMPLES

Sending credentials via local socket

    use Socket;

    control => [
        Socket::SOL_SOCKET(), Socket::SCM_CREDENTIALS(),
        pack( 'I!*', $$, $>, split( m< >, $) ) ),
    ]

Passing open file descriptors via local socket

    control => [
        Socket::SOL_SOCKET(), Socket::SCM_RIGHTS(),
        pack( 'I!*', @file_descriptors ),
    ]

Also see Socket::MsgHdr’s documentation for another example.

TODO

I’m not sure if recvmsg() is feasible to implement in pure Perl, but that would be a natural complement to this module.

SEE ALSO

Socket::MsgHdr provides both sendmsg() and recvmsg().