socket sockaddr_in servidor por enviar cliente archivos archivo linux sockets unix ipc

linux - sockaddr_in - ¿Cómo diferencian los Sockets de Dominio de Unix entre múltiples clientes?



sockets java (1)

Si crea un socket PF_UNIX de tipo SOCK_STREAM y acepta conexiones en él, cada vez que acepte una conexión, obtendrá un nuevo descriptor de archivo (como el valor de retorno de la llamada al sistema accept ). Este descriptor de archivo lee datos y escribe datos en un descriptor de archivo en el proceso del cliente. Por lo tanto, funciona como una conexión TCP / IP.

No hay un "formato de protocolo de dominio de Unix". No es necesario, porque un socket de dominio Unix no se puede conectar a un par a través de una conexión de red. En el kernel, el descriptor de archivo que representa su extremo de un SOCK_STREAM socket de dominio Unix apunta a una estructura de datos que le dice al kernel qué descriptor de archivo está en el otro extremo de la conexión. Cuando escribe datos en su descriptor de archivo, el kernel busca el descriptor de archivo en el otro extremo de la conexión y agrega los datos al búfer de lectura de ese otro archivo descriptor. El kernel no necesita poner sus datos dentro de un paquete con un encabezado que describa su destino.

Para un socket SOCK_DGRAM , debe decirle al kernel la ruta del socket que debe recibir sus datos, y lo usa para buscar el descriptor de archivo para ese socket receptor.

Si vincula una ruta al socket del cliente antes de conectarse al socket del servidor (o antes de enviar datos si está utilizando SOCK_DGRAM ), el proceso del servidor puede obtener esa ruta usando getpeername (para SOCK_STREAM ). Para un SOCK_DGRAM , el lado receptor puede usar recvfrom para obtener la ruta del socket de envío.

Si no vincula una ruta, entonces el proceso de recepción no puede obtener una identificación que identifique de manera única al par. Al menos, no en el kernel de Linux que estoy ejecutando ( 2.6.18-238.19.1.el5 ).

TCP tiene los pares de tuplas (IP Addr / port / type) para distinguir un cliente de otro. UDP pasa el IP del cliente y el puerto. ¿Cómo hace un seguimiento del dominio Unix de diferentes clientes?

En otras palabras, el servidor crea un socket vinculado a alguna ruta say / tmp / socket. 2 o más clientes se conectan a / tmp / socket. ¿Qué está sucediendo debajo que rastrea los datos de client1 y client2? Me imagino que la pila de la red no forma parte de los sockets de dominio, ¿así que el núcleo está haciendo todo el trabajo aquí?

¿Hay un formato de protocolo de dominio Unix como si hubiera un formato de protocolo IP y formatos TCP / UDP? ¿El formato de los protocolos de datagramas socket de dominio está publicado en alguna parte? ¿Cada UNIX es diferente o hace algo como POSIX estandarizarlo?

Gracias por cualquier iluminación. No pude encontrar ninguna información que explicara esto. Cada fuente simplemente pasó por alto cómo usar los sockets de dominio.