Hi!
If have this code:
But if I run it I get segementation fault caused by pthread_create. Why?Code:#include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> //#include < #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <pthread.h> #include <errno.h> #include "share/server.h" #include "share/string.h" int main (void) { /*if (fork () != -1) {*/ int server; int client; struct sockaddr_in server_address; struct sockaddr_in client_address; pthread_t *pthread; unsigned short int pthreadc; socklen_t size; server = socket (PF_INET, SOCK_STREAM, 0); printf ("socket %d:%d\n", server, errno); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = INADDR_ANY; server_address.sin_port = htons (15000); printf ("Bind %d:%d\n",bind (server, (struct sockaddr *) &server_address, sizeof (server_address)), errno); printf ("Listen %d:%d\n", listen (server, 5), errno); while (1) { size = sizeof (client_address); client = accept (server, (struct sockaddr *) &client_address, &size); if (client > 0) { printf ("Client %d\n", client); if (pthread == NULL) { pthread = malloc (sizeof (pthread_t)); } else { pthreadc++; pthread = realloc (pthread, sizeof (pthread_t) * (pthreadc + 1)); } pthread_create ((pthread_t *) pthread [pthreadc], NULL, (void *) server_thread_go, &client); } else { printf ("Client2 %d: %d\n", client, errno); //close (server); } } pthread_exit (NULL); close (server); } //} int server_thread_go (void *client) { char depot [64]; char *data; int value; printf ("THREAD\n"); do { value = read ((int) client, &depot, 64); if (value > 0) { if (data == NULL) { data = malloc (sizeof (char) * (strlen (depot) + 1)); } else { data = realloc (data, sizeof (char) * (strlen (data) + 1 + strlen (depot) + 1)); } data = strcat (data, depot); } } while (value > 0); if (!strncmp ("help", strtolower (data), strlen ("help"))) { } else if (!strncmp ("activate", strtolower (data), strlen ("activate"))) { } else if (!strncmp ("deactivate", strtolower (data), strlen ("deactivate"))) { } else if (!strncmp ("authenticate", strtolower (data), strlen ("authenticate"))) { } else if (!strncmp ("replicate", strtolower (data), strlen ("replacte"))) { } else if (!strncmp ("modify", strtolower (data), strlen ("modify"))) { } else if (!strncmp ("move", strtolower (data), strlen ("move"))) { } return 0; }
thanks



LinkBack URL
About LinkBacks


