def w_make_pair(self): import _multiprocess fd1, fd2 = self.socketpair() rhandle = _multiprocess.Connection(fd1, writable=False) whandle = _multiprocess.Connection(fd2, readable=False) self.connections.append(rhandle) self.connections.append(whandle) return rhandle, whandle
def Pipe(duplex=True): ''' Returns pair of connection objects at either end of a pipe ''' if duplex: s1, s2 = socket.socketpair() c1 = _multiprocessing.Connection(os.dup(s1.fileno())) c2 = _multiprocessing.Connection(os.dup(s2.fileno())) s1.close() s2.close() else: fd1, fd2 = os.pipe() c1 = _multiprocessing.Connection(fd1, writable=False) c2 = _multiprocessing.Connection(fd2, readable=False) return c1, c2
def SocketClient(address): ''' Return a connection object connected to the socket given by `address` ''' family = address_type(address) with socket.socket(getattr(socket, family)) as s: s.setblocking(True) t = _init_timeout() while 1: try: s.connect(address) except socket.error as e: if e.args[0] != errno.ECONNREFUSED or _check_timeout(t): debug('failed to connect to address %s', address) raise time.sleep(0.01) else: break else: raise fd = duplicate(s.fileno()) conn = _multiprocessing.Connection(fd) return conn
def accept(self): s, self._last_accepted = self._socket.accept() s.setblocking(True) fd = duplicate(s.fileno()) conn = _multiprocessing.Connection(fd) s.close() return conn
def test_repr(self): import _multiprocess, os fd = os.dup(1) # closed by Connection.__del__ c = _multiprocess.Connection(fd) assert repr(c) == '<read-write Connection, handle %d>' % fd if hasattr(_multiprocess, 'PipeConnection'): fd = os.dup(1) # closed by PipeConnection.__del__ c = _multiprocess.PipeConnection(fd) assert repr(c) == '<read-write PipeConnection, handle %d>' % fd
def accept(self): while True: try: s, self._last_accepted = self._socket.accept() except socket.error as e: if e.args[0] != errno.EINTR: raise else: break s.setblocking(True) fd = duplicate(s.fileno()) conn = _multiprocessing.Connection(fd) s.close() return conn
while 1: try: s.connect(address) except socket.error, e: if e.args[0] != errno.ECONNREFUSED or _check_timeout(t): debug('failed to connect to address %s', address) raise time.sleep(0.01) else: break else: raise fd = duplicate(s.fileno()) conn = _multiprocessing.Connection(fd) s.close() return conn # # Definitions for connections based on named pipes # if sys.platform == 'win32': class PipeListener(object): ''' Representation of a named pipe ''' def __init__(self, address, backlog=None):
def rebuild_connection(reduced_handle, readable, writable): handle = rebuild_handle(reduced_handle) return _multiprocessing.Connection(handle, readable=readable, writable=writable)