Skip to content

Commit e744e41

Browse files
committed
process: Use a pair of UNIX sockets (istead of named pipes) for IPC
1 parent 054c9db commit e744e41

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

uvloop/handles/process.pyx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,13 @@ cdef class UVProcessTransport(UVProcess):
269269
return dn
270270

271271
cdef _file_outpipe(self):
272-
r, w = os_pipe()
272+
r, w = __socketpair()
273273
os_set_inheritable(w, True)
274274
self._close_after_spawn(w)
275275
return r, w
276276

277277
cdef _file_inpipe(self):
278-
r, w = os_pipe()
278+
r, w = __socketpair()
279279
os_set_inheritable(r, True)
280280
self._close_after_spawn(r)
281281
return r, w
@@ -583,3 +583,19 @@ cdef void __uvprocess_on_exit_callback(uv.uv_process_t *handle,
583583
proc._on_exit(exit_status, term_signal)
584584
except BaseException as ex:
585585
proc._error(ex, False)
586+
587+
588+
cdef __socketpair():
589+
cdef:
590+
int fds[2]
591+
int err
592+
593+
err = system.socketpair(uv.AF_UNIX, uv.SOCK_STREAM, 0, fds)
594+
if err:
595+
exc = convert_error(-err)
596+
raise exc
597+
598+
os_set_inheritable(fds[0], False)
599+
os_set_inheritable(fds[1], False)
600+
601+
return fds[0], fds[1]

uvloop/includes/stdlib.pxi

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ cdef int socket_EAI_SOCKTYPE = getattr(socket, 'EAI_SOCKTYPE', -1)
6969
cdef str os_name = os.name
7070
cdef os_environ = os.environ
7171
cdef os_dup = os.dup
72-
cdef os_pipe = os.pipe
7372
cdef os_set_inheritable = os.set_inheritable
7473
cdef os_get_inheritable = os.get_inheritable
7574
cdef os_close = os.close

uvloop/includes/system.pxd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,5 @@ cdef extern from "sys/socket.h":
3838
# ...
3939

4040
const char *gai_strerror(int errcode)
41+
42+
int socketpair(int domain, int type, int protocol, int socket_vector[2])

0 commit comments

Comments
 (0)