Passing file descriptors
imbosol at aerojockey.invalid
Thu Jun 10 08:48:00 CEST 2004
Josiah Carlson wrote:
> I've been working on this for more hours than I'm willing to admit,
> perhaps someone here can help me make it happen.
When I first saw the subject, I was about to point out that you had
the wrong newsgroup: you want comp.lang.perl.misc
I see you were talking about something else though.
> This us using Python 2.3.3
> - I do have access to a SunOS 5.8 machine, and the script at the end
> of this email works.
> - I need it to work on linux kernel 2.4.x.
> I'm trying to write the equivalent of what the author calls "ringd"
> described in the below article, and use it with python 2.3.x on linux 2.4:
> The script that I provide at the end of this post is a variation of one
> posted in this thread:
> There is a C version listed later in that article, but I've not yet
> tried it out.
> Certainly I need a two things:
> 1. Unix domain socket, local socket (standard socket connected locally),
> or pipe
> 2. sendmsg/recvmsg, fcntl.ioctl, or equivalent file descriptor manipulation
> In the script listed at the end of this post, I use a file descriptor
> pair returned by os.pipe(), which should be sufficient. I also use
> As stated previously, this works properly on SunOS 5.8:
> jcarlson at synergistic-envision% python2.3 fdpass.py
> Parent ioctl() returned 0
> jcarlson at synergistic-envision%
> It does not work on the linux machine I'm testing it on:
> [jcarlson at dev jcarlson]$ python fdpass.py
> [Errno 22] Invalid argument
> Traceback (most recent call last):
> File "fdpass.py", line 58, in ?
> ret = fcntl.ioctl(pRead, fcntl.I_RECVFD, s)
> IOError: [Errno 22] Invalid argument
> [jcarlson at dev jcarlson]$
> Seemingly this is because I_SENDFD/I_RECVFD is not properly implemented
> on linux 2.4, but maybe I'm doing something wrong.
> I've also tried using SCM_RIGHTS as per this thread:
> It is not defined in python's fcntl module, but I did find the C
> definition in the linux /usr/include/bits/socket.h...
> SCM_RIGHTS = 0x01, /* Transfer file descriptors. */
> So I passed the integer 1 manually, on both linux and SunOS 5.8 and got
> exceptions like I normally do on linux.
Last I checked, you have to use a Unix-domain socket to do this in
CARL BANKS http://www.aerojockey.com/software
"If you believe in yourself, drink your school, stay on drugs, and
don't do milk, you can get work."
-- Parody of Mr. T from a Robert Smigel Cartoon
More information about the Python-list