Duda sobre la llamada accept() de los sockets

Miguel Araujo muchochini en gmail.com
Mie Feb 13 20:41:01 CET 2008


Hola a todos,

Estoy intentando resolver una serie de dudas con intención de poder llevar
una práctica de programación que me traigo entre manos a buen puerto. La
llamada accept de un socket devuelve un socket y una dirección. Este socket
que devuelve lo interpreto yo como un canal de la conexión ¿es correcto?
como un minisocket dentro de un socket o algo así.

Entonces si yo tengo un socket UNIX y conecto 3 procesos B,C y D con un
proceso A. Este A necesita crear un solo socket AF_UNIX, hacer un listen(3)
y luego ir recogiendo los resultados de las llamadas accept ¿no? Pero como
puede distinguir por el canal que proceso está conectado. Enseño código de
ejemplo para explicarme mejor:

enchufe = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
enchufe.bind("/tmp/socketprocesoA")
enchufe.listen(3)

# Esta llamada es bloqueante hasta conexión
canal, addr = enchufe.accept()

Cuando alguien se me conecte tengo en el canal una conexión con ese proceso,
pero desconozco que proceso es. La función getpeername() no es de ayuda la
parte servidor del socket, solamente en la parte cliente, la que hace
connect() y de hecho no sirve de mucho porque lo que hace es un
getsockname()

¿Hay alguna manera de saber esto sin tener que enviar un mensaje del tipo
"wtf quién eres?" ?

Muchas gracias por vuestro tiempo y ayuda,

Un saludo
      Miguel Araujo
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es