def _do_ssl_handshake(self, *ssl_args, **ssl_kwargs): """Perform SSL handshake, directly. Not for public use; it's racy when called from an IO handler for this stream.""" if (not self): # Never mind, then. return import ssl from socket import dup for bufel in self._outbuf: if (hasattr(bufel, 'queue')): try: raise ValueError("DTR {0!a} in queue; our fd isn't safe to dup.".format(bufel)) except: self.close() raise self.ssl_handshake_pending = None self._in = None self._out = None # Since r80515, ssl.SSLSocket is even harder to deal with than before, since just passing the fileno of an existing # connection to the constructor doesn't work correctly anymore. # We hack around this API issue here. This now results in two unnecessary dups and closes, but should at least work. skwargs = {'fileno': dup(self.fl.fileno())} try: skwargs['family'] = self.fl.family skwargs['type'] = self.fl.type skwargs['proto'] = self.fl.proto except AttributeError: pass try: sock_tmp = socket.socket(**skwargs) except: os.close(skwargs['fileno']) raise sock_tmp.setblocking(0) self._fw.process_close = lambda: None self._fw.close() self.fl.close() self.fl = None try: ssl_sock = ssl.SSLSocket(sock=sock_tmp, *ssl_args, do_handshake_on_connect=False, **ssl_kwargs) finally: sock_tmp.close() ssl_sock.setblocking(0) self.fl = ssl_sock self._fw = self._ed.fd_wrap(ssl_sock.fileno(), fl=ssl_sock) self._fw.read_r() self._fw.process_close = self._process_close self._fw.process_writability = self._ssl_handshake_step self._fw.process_readability = self._ssl_handshake_step self._ssl_handshake_step()
def test_dup(self): import _socket as socket, os s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('localhost', 0)) fd = socket.dup(s.fileno()) assert s.fileno() != fd if os.name != 'nt': assert os.get_inheritable(s.fileno()) is False assert os.get_inheritable(fd) is False s_dup = socket.socket(fileno=fd) s_dup.close() s.close()
def copy(cls, sock): """ Crée un objet Player a partir d'un socket :param sock: le socket a copié :return: l'objet Player généré """ fd = socket.dup(sock.fileno()) copy = cls(sock.family, sock.type, sock.proto, fileno=fd) copy.settimeout(sock.gettimeout()) sock.close() return copy
def __init__(self, sock): """Initialises DriverSocket. Args: socket: A socket through which the communication should be done. """ super(DriverSocket, self).__init__( sock.family, sock.type, sock.proto, fileno=socket.dup(sock.fileno()) ) self.settimeout(sock.gettimeout()) self._buf = np.zeros(0, np.byte) if socket: self.peername = self.getpeername() else: self.peername = "no_socket"
def copy(self, sock): fd = socket.dup(sock.fileno()) nsoc = self(sock.family, sock.type, sock.proto, fileno=fd) nsoc.settimeout(sock.gettimeout()) return nsoc
def test_dup(self): import _socket as socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('localhost', 0)) fd = socket.dup(s.fileno()) assert s.fileno() != fd
def slip_fromfd(fd, family, type, proto=0): nfd = socket.dup(fd) return SLIPSocket(family, type, proto, nfd)
def copy(cls, sock): fd = sk.dup(sock.fileno()) copy = cls(sock.family, sock.type, sock.proto, fileno=fd) copy.settimeout(sock.gettimeout()) return copy
def copy(cls, s): fn = socket.dup(s.fileno()) copy = cls(s.family, s.type, s.proto, fileno=fn) copy.settimeout(s.gettimeout()) return copy
s.close() # обеспечивает закрытие сокета s.connect(address) # активно инициирует соединение сервера TCP s.connect_ex(address) # представляет собой расширенную версию метода connect(), которая # предусматривает возврат сообщений о возникших проблемах в виде кодов # ошибок, а не генерирование исключения s.detach() # обеспечивает закрытие сокета без закрытия дескриптора файла и # возвращает дескриптор s.dup() # Дублирует сокет. Созданный сокет не наследуется. s.fileno() # определяет дескриптор файла сокета s.get_inheritable() # Получить наследуемый флаг дескриптора файла сокета или дескриптора # сокета: # True, если сокет может быть унаследован в дочерних процессах, # False, если он не может. s.getpeername() # задаёт удаленный адрес, подключенный к сокету (ТСР) s.getsockname()