
SOCKETPAIRS
C/Visual C
Publicado el 10 de Octubre del 2022 por Hilario (144 códigos)
505 visualizaciones desde el 10 de Octubre del 2022
*************************************************************************
Dulce bellum inexpertis.
************************************************************************
Hilario Iglesias Martínez
************************************************************************
Socket_Pair.c
----------------------------------------------------------------------
Este programa fue realizado en una plataforma
LINUX Ubuntu 20.04.4 LTS.
Bajo el standard ANSI-C,
bajo una consola Linux.
*************************************************************************
En este programa trataremos la función socketpair
que realiza un mecanismo de comunicación entre procesos,
muy parecido al de la función pipes.
La diferencia fundamental con pipes, es que la comunicación
entre procesos es bidireccional.
Esta función se encuentra en la librería <sys/socket.h>
"int socketpair(int domain, int type, int protocol, int sv[2]);"
La función socketpair() crea un par de sockets del tipo especificado
que no tienen nombre y están conectados en el dominio indicado
y utilizando el protocolo especificado.
Argumentos descripción.
----------------------
dominio:(PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL)
El dominio: en el que abrir el socket.
Aunque se pueden obtener pares de sockets para sockets de dominio AF_INET,
se recomienda utilizar sockets de dominio:PF_UNIX, AF_UNIX para pares de sockets.
El tipo: de socket creado, ya sea SOCK_STREAM o SOCK_DGRAM.
Protocolo:El protocolo solicitado debe ser 0.
sv:Array, con los descriptores utilizados
para referirse a los sockets obtenidos.
-----------------------------------------------------------------
Para compilar el programa se puede utilizar la utilidad make, adjunta.
También se puede compilar directamente bajo consola de linux con el comando,
teniendo en cuenta que:
Socket_Pair.c
volcado.c
variables.h
deberán estar bajo el mismo directorio.
gcc -Wall -Werror -o Socket_Pair Socket_Pair.c volcado.c
Ejecutar:
./Socket_Pair
*/
Dulce bellum inexpertis.
************************************************************************
Hilario Iglesias Martínez
************************************************************************
Socket_Pair.c
----------------------------------------------------------------------
Este programa fue realizado en una plataforma
LINUX Ubuntu 20.04.4 LTS.
Bajo el standard ANSI-C,
bajo una consola Linux.
*************************************************************************
En este programa trataremos la función socketpair
que realiza un mecanismo de comunicación entre procesos,
muy parecido al de la función pipes.
La diferencia fundamental con pipes, es que la comunicación
entre procesos es bidireccional.
Esta función se encuentra en la librería <sys/socket.h>
"int socketpair(int domain, int type, int protocol, int sv[2]);"
La función socketpair() crea un par de sockets del tipo especificado
que no tienen nombre y están conectados en el dominio indicado
y utilizando el protocolo especificado.
Argumentos descripción.
----------------------
dominio:(PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL)
El dominio: en el que abrir el socket.
Aunque se pueden obtener pares de sockets para sockets de dominio AF_INET,
se recomienda utilizar sockets de dominio:PF_UNIX, AF_UNIX para pares de sockets.
El tipo: de socket creado, ya sea SOCK_STREAM o SOCK_DGRAM.
Protocolo:El protocolo solicitado debe ser 0.
sv:Array, con los descriptores utilizados
para referirse a los sockets obtenidos.
-----------------------------------------------------------------
Para compilar el programa se puede utilizar la utilidad make, adjunta.
También se puede compilar directamente bajo consola de linux con el comando,
teniendo en cuenta que:
Socket_Pair.c
volcado.c
variables.h
deberán estar bajo el mismo directorio.
gcc -Wall -Werror -o Socket_Pair Socket_Pair.c volcado.c
Ejecutar:
./Socket_Pair
*/
Comentarios sobre la versión: Rv-0. (2)
En primer lugar por seguridad y en segundo lugar porque no hay ninguna garantía de que puedas enviar todo el buffer de una vez ni de que leas todo el buffer de una vez (aunque generalmente es así).
En tu ejemplo la única manera de saber si has leído todo el mensaje es buscar un 0 al final del buffer leído, supongo que para eso escribes strlen() + 1 bytes, para incluir el 0.
Generalmente es conveniente usar una "cabecera" que lleve al menos el tamaño del mensaje.
Y, por simplicidad, mejor usar sock_dgram.
Un saludo.