fdsend is yet another file descriptor passing abstraction, specifically for Python. This package offers a few conveniences not commonly found together in other abstractions: sending multiple files at once, sending arbitrary data, and working with both files and file descriptors.
fdsend is free software, licensed under the GPL.
Python >= 2.2 is required, as is SCM_RIGHTS support on AF_UNIX sockets. Only Linux has been tested.
The current version is fdsend-0.1 (03 Nov 2004)
import fdsend
import socket # for socket.error
# -- sender; send 12 files
#
nulldevs = [ file('/dev/null') for i in xrange(12) ]
fdsend.sendfds(sock, "here you go!", fds = nulldevs)
# -- recipient; receive up to 128-byte message, and up to 32 files
#
(msg, fds) = fdsend.recvfds(sock, 128, numfds = 32)
import os
fds = [ os.fdopen(fileno) for fileno in fds ]
# -- exception handling
#
import socket
try:
notasock = file("/dev/null")
fdsend.sendfds(notasock, "This won't work!")
except socket.error, e:
import errno
if e[0] == errno.ENOTSOCK:
print "What did you expect? :)"
Report problems, bugs, feature requests, successes to me at mjp-py@pilcrow.madison.wi.us.