Code:
void *threadWrite(void *arg)
{
struct threadWriteArgs* toWrite = (struct threadWriteArgs*) arg;
int sock = toWrite->sock;
int n = toWrite->n;
struct sockaddr_in server = toWrite->server;
struct hostent *hp = toWrite->hp;
int serverPort = toWrite->serverPort;
size_t length;char buffer[256];
while(1)
{
bcopy((char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length);
server.sin_port = serverPort;
length=sizeof(struct sockaddr_in);
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n=sendto(sock,buffer, strlen(buffer), 0, &server, length);
if (n < 0) error("Sendto");
}
pthread_exit((void*) 27);
}
void *threadWait(void *arg)
{
struct threadWaitArgs* toWait = (struct threadWaitArgs*) arg;
int sock = toWait->sock;
int n = toWait->n;
struct sockaddr_in from=toWait->from;
size_t length = sizeof(struct sockaddr_in);
char buffer[256];
while(1)
{
n = recvfrom(sock,buffer,256,0,&from, &length);
if (n < 0) error("recvfrom");
// write(1,"Got an ack: ",12);
write(1,buffer,n);
}
}
void join(int sock,int n,struct sockaddr_in server, struct sockaddr_in from , struct hostent *hp, int serverPort )
{
size_t length;
char buffer[256];
bcopy((char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length);
server.sin_port = serverPort;
length = sizeof(struct sockaddr_in);
printf("Please enter join plus your nickname: ");
bzero(buffer, 256);
fgets(buffer, 255, stdin);
n = sendto(sock, buffer, strlen(buffer), 0, &server, length);
if (n < 0) error("Sendto");
n = recvfrom(sock, buffer, 256, 0, &from, &length);
if (n < 0) error("recvfrom");
write(1, buffer, n);
//the write message is printed out before the user is kicked off
pthread_t waitingThread;
pthread_t writingThread;
threadWaitArgs toWait;
toWait.sock = sock;
toWait.n =n;
toWait.from = from;
threadWriteArgs toWrite;
toWrite.sock = sock;
toWrite.n = n;
toWrite.server = server;
toWrite.from=from;
toWrite.hp = hp;
toWrite.serverPort = serverPort;
int waitingResult = pthread_create(
&waitingThread,
NULL,
&threadWait,
(void*) &toWait);
int writingResult = pthread_create(
&writingThread,
NULL,
&threadWrite,
(void*) &toWrite);
if(waitingResult !=0)
{
printf("Could not create waiting thread\n");
exit(1);
}
if(writingResult !=0)
{
printf("Could not create writing thread\n");
exit(1);
}
}
the code compiles, so i am not sure why the threads arent being created.