Use the python builtin methods for setting socket inheritance

This commit is contained in:
Kovid Goyal 2020-10-15 19:07:44 +05:30
parent d57c4d369b
commit e48db37839
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -11,29 +11,20 @@ Code taken from https://mail.python.org/pipermail/python-dev/2007-June/073745.ht
modified to make it work modified to make it work
''' '''
from calibre.constants import iswindows
def get_socket_inherit(s):
def get_socket_inherit(socket):
''' '''
Returns True if the socket has been set to allow inheritance across Returns True if the socket has been set to allow inheritance across
forks and execs to child processes, otherwise False forks and execs to child processes, otherwise False
''' '''
try: try:
if iswindows: return s.get_inheritable()
import win32api, win32con except Exception:
flags = win32api.GetHandleInformation(socket.fileno())
return bool(flags & win32con.HANDLE_FLAG_INHERIT)
else:
import fcntl
flags = fcntl.fcntl(socket.fileno(), fcntl.F_GETFD)
return not bool(flags & fcntl.FD_CLOEXEC)
except:
import traceback import traceback
traceback.print_exc() traceback.print_exc()
def set_socket_inherit(sock, inherit): def set_socket_inherit(s, inherit=False):
''' '''
Mark a socket as inheritable or non-inheritable to child processes. Mark a socket as inheritable or non-inheritable to child processes.
@ -45,24 +36,8 @@ def set_socket_inherit(sock, inherit):
set_socket_inherit for the new socket as well. set_socket_inherit for the new socket as well.
''' '''
try: try:
if iswindows: s.set_inheritable(inherit)
import win32api, win32con except Exception:
if inherit:
flags = win32con.HANDLE_FLAG_INHERIT
else:
flags = 0
win32api.SetHandleInformation(sock.fileno(),
win32con.HANDLE_FLAG_INHERIT, flags)
else:
import fcntl
fd = sock.fileno()
flags = fcntl.fcntl(fd, fcntl.F_GETFD) & ~fcntl.FD_CLOEXEC
if not inherit:
flags = flags | fcntl.FD_CLOEXEC
fcntl.fcntl(fd, fcntl.F_SETFD, flags)
except:
import traceback import traceback
traceback.print_exc() traceback.print_exc()