Código
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> #include <pthread.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 1024 #define BACKLOG 2 void* do_some_thing(void*); int main() { int fd; struct sockaddr_in server; pthread_t thread1; /* Limpiamos la pantalla */ /* Creamos el socket */ if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1) { return -1; } server.sin_family = AF_INET; server.sin_port = htons(PORT); server.sin_addr.s_addr = INADDR_ANY; bzero(&(server.sin_zero), 8); if(bind(fd, (struct sockaddr*) &server, sizeof(struct sockaddr)) == -1) { return -1; } /* Ponemos el socket a la escucha */ if(listen(fd, BACKLOG) == -1) { return -1; } if(pthread_create( &thread1, NULL, do_some_thing, &fd) != 0) { return -1; } if(pthread_join( thread1, NULL) != 0) { return -1; } return 0; } void* do_some_thing(void* fd) { int fd2; struct sockaddr_in client; socklen_t sin_size; char Buffer[100]; sin_size = sizeof(struct sockaddr_in); fd2 = accept(*((int*)fd), (struct sockaddr*)&client, &sin_size); while (sin_size != 0) { sin_size= recv(fd2, Buffer, 100,0); if (sin_size > 0) { Buffer[sin_size-1]='\0'; } } if(close(fd2) != 0) { return (void*)-1; } fd2 = 0; return NULL; }
Con lo que no me aclaro es con las lineas 37 y 71, se perfectamente lo que hacen esas funciones, con lo que me hago un lio es con tanto puntero usándose al mismo tiempo, que ya no se ni cual es el "resultado" de tanto * y & y tanto paréntesis, si alguien me lo explicara detalladamente se lo agradecería un montón.
Y ya de paso, ¿ Hay alguna manera más sencilla de usar sockets en C? (para linux).
Gracias.