En cuestión quiero crear una librería para simplificar el uso de sockets, en otra palabras, hacer las cosas más cómodamente.
La estructura general de la librería se compone de una estructura que almacena datos del socket; una estructura candidata posible podría ser algo como:
Código
typedef int socket; typedef struct libreria_socket { socket socket_fd; struct sockaddr_in host; } socket;
La segunda cosa fundamental será la inicialización de esa estructura. Para ello necesitamos 2 funciones auxiliares que recibirán los parametros directamente desde una función principal iniciar_socket; la primera de ellas crear_socket, supongamos que AF (Adress Format) es INET (IP y puerto): AF_INET; la segunda de ellas podría tener 2 variantes: iniciar_sockaddr e iniciar_sockaddrany. La diferencia de estas es que en la estructura sockaddr_in, sin_addr atendería en todo el rango: 127.0.0.1/24.
Funciones secundarias, que bien podrían servir para formar parte de una función principal que automatice el proceso dependiendo de las necesidades del usuario final ó para tener el código más organizado, limpio, estético y hacer las cosas más sencillas. Estas son las funciones conectar_socket, bind_socket, escuchar_socket, aceptar_socket (esta según lo anterior también podría tener dos variantes: aceptar_socket y aceptar_socket_addrany), cerrar_socket.
Las funciones de lectura y escritura pueden usarse nativamente. Un pseudocódigo de cómo funcionaría la librería según las ideas que tengo ahora mismo:
Código
socket socket_test; iniciar_socket(&socket_test, 8080 /* puerto */, "127.0.0.1" /* direccion ip */); conectar_socket(&socket_test); char buffer[1024]; // Recibir datos read(socket_test.socket_fd, buffer, 1024); // Reenviar datos write(socket_test.socket_fd, buffer, 1024);
De momento eso es todo. Aporten ideas, comentarios, soluciones, otra forma de hacerlo...
Saludos.