示例#1
0
 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()
示例#2
0
 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()
示例#3
0
    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
示例#4
0
    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"
示例#5
0
 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
示例#6
0
 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
示例#7
0
def slip_fromfd(fd, family, type, proto=0):
    nfd = socket.dup(fd)
    return SLIPSocket(family, type, proto, nfd)
示例#8
0
 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
示例#9
0
 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
示例#10
0
 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
示例#11
0
def slip_fromfd(fd, family, type, proto=0):
    nfd = socket.dup(fd)
    return SLIPSocket(family, type, proto, nfd)
示例#12
0
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()