Code:
void *threadWrite(int sock,int n, struct sockaddr_in server, struct sockaddr_in from , struct hostent *hp, char *argv[]){
size_t length;char buffer[256];
while(1){
bcopy((char *)hp->h_addr,
(char *)&server.sin_addr,
hp->h_length);
server.sin_port = htons(atoi(argv[2]));
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(int sock, int n, struct sockaddr_in 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, char *argv[] ){
size_t length;
char buffer[256];
bcopy((char *)hp->h_addr,
(char *)&server.sin_addr,
hp->h_length);
server.sin_port = htons(atoi(argv[2]));
length=sizeof(struct sockaddr_in);
printf("Please enter 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");
pthread_t waitingThread;
pthread_t writingThread;
int waitingResult = pthread_create(
&waitingThread,
NULL,
&threadWait,
(void*) sock, n,from);
int writingResult = pthread_create(
&writingThread,
NULL,
&threadWrite,
(void*) sock, n, server, from, hp, argv);
if(waitingResult !=0){
printf("Could not create waiting thread\n");
exit(1);
}
if(writingResult !=0){
printf("Could not create writing thread\n");
exit(1);
}
}
I have ommited the networking code, as this works fine and is producing no problems, will include if needed