Hi!
If have this code:
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;
}
But if I run it I get segementation fault caused by pthread_create. Why?
thanks