def send_fds(sock, fds, data='\n'): """ Send file descriptors over a Unix domain socket. @param sock: socket or fd @type sock: socket.socket or int @param fds: file descriptors to send @type num: iterable of int @param data: data to transfer, to force C{sendmsg(2)} to do work @type data: str """ if not isinstance(sock, int): sock = sock.fileno() return sendmsg( fd=sock, data=data, ancillary=[ ( SOL_SOCKET, SCM_RIGHTS, array.array('i', fds).tostring(), ), ], )
def sendmsg(self, **kwargs): if not self.bound: return -errno.ENOTCONN print kwargs return sendmsg(self.socket, **kwargs)
#!/usr/bin/python import socket from eunuchs.sendmsg import sendmsg from socket import SOL_SOCKET, SO_BROADCAST, SOL_IP IP_PKTINFO = 8 #TODO IP_RETOPTS = 7 #TODO s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) s.setsockopt(SOL_IP, IP_PKTINFO, 1) sendmsg(fd=s.fileno(), host='255.255.255.255', port=4242, data="foo", flags=0, ancillary=[ (SOL_IP, IP_PKTINFO, (10, #interface index '0.0.0.0', '255.255.255.255', )), #(SOL_IP, IP_RETOPTS, ''), ], )