On 2017-01-21, Grant Edwards <grant.b.edwa...@gmail.com> wrote: > Given a Unix file discriptor for an open TCP socket, I can't figure > out how to create a python 2.7 socket object like those returned by > socket.socket() > > Based on the docs, one might think that socket.fromfd() would do that > (since the docs say that's what it does): [...] > That prompts a question: given a "socket object" as returned by > socket.fromfd(), how does one create a "socket._socketobject object" > as returned by socket.socket()?
Of course I figured it out immediately after spending 15 minutes whinging about it. help(socket.socket) gives you a hint: class _socketobject(__builtin__.object) | socket([family[, type[, proto]]]) -> socket object | [...] | | Methods defined here: | | __init__(self, family=2, type=1, proto=0, _sock=None) | Ah! There's a keyword argument that doesn't appear in the docs, so let's try that... context = ssl.create_default_context() [...] sock = socket.fromfd(fd2,socket.AF_INET,socket.SOCK_STREAM) nsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM,_sock=sock) conn = context.wrap_socket(nsock, server_hostname="whatever.invalid") That works. -- Grant -- https://mail.python.org/mailman/listinfo/python-list