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