¿Tiene sentido alguna vez leer y / o escribir en un conector de escucha vinculado?

7

Estoy experimentando un poco con la creación de un servidor de socket, en PHP. Al hacerlo, estoy tratando de abstraer los tipos de enchufes que creo que necesitaré, a los que he llamado tentativamente:

  • ListenSocket : el socket 'maestro', que está vinculado a una dirección / puerto y escucha y acepta las conexiones entrantes.
  • CommunicationSocket : un socket 'secundario', que representa una conexión entrante aceptada con la que se comunicará el servidor.

Como su nombre ya lo indica, solo definiré los tipos de métodos read() y write() en el CommunicationSocket .

Sin embargo, al hacerlo me pregunto: ¿alguna vez tiene sentido leer o escribir en el primer tipo de socket (el delimitado, el tipo de escucha)?

    
pregunta Decent Dabbler 25.06.2015 - 11:19

1 respuesta

2

Interpreto su pregunta de una manera que se refiere a sockets TCP / IP. Con sockets UDP / IP es diferente.

Dos escenarios:

Escenario 1: 1. bind 2. connect 3. listen
Resultado: no puede escuchar en un socket conectado.

>>> import socket
>>> s = socket.socket()
>>> s.bind(('', 0))
>>> s.send(b'a')
Traceback (most recent call last):
  File "<pyshell#130>", line 1, in <module>
    s.send(b'a')
OSError: [WinError 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied
>>> s.connect(('google.de', 80))
>>> s.listen(1)
Traceback (most recent call last):
  File "<pyshell#132>", line 1, in <module>
    s.listen(1)
OSError: [WinError 10056] A connect request was made on an already connected socket

Escenario 2: 1. vinculación 2. escucha 3. conexión
Resultado: no se puede conectar o enviar a una toma de escucha.

>>> s = socket.socket()
>>> s.bind(('', 0))
>>> s.listen(1)
>>> s.connect(('google.de', 80))
Traceback (most recent call last):
  File "<pyshell#136>", line 1, in <module>
    s.connect(('google.de', 80))
OSError: [WinError 10022] An invalid argument was supplied
>>> s.send(b"123")
Traceback (most recent call last):
  File "<pyshell#137>", line 1, in <module>
    s.send(b"123")
OSError: [WinError 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied
    
respondido por el User 02.07.2015 - 09:44

Lea otras preguntas en las etiquetas