I am using pthreads and sockets. What I am going to be having is multiple socket connections (no more than 5 or so). What I need is a recv() function on each of them in their own thread.
I just basically need to know what a good way is. The way I am doing it now runs my program at like 95% cpu usage. I can't believe this is good, but I don't know another way. Does anyone know how to keep recv blocking?
Below is some code, main is some pseudo code. As you can see, I just throw some while loops down.
Code:
int main (void)
{
create variables...
serv = connectserver(host, port);
if (serv)
create_recv_thread(serv, serv_recv, &listen_server);
while(1);
}
int create_recv_thread(int server, buffer_t *buffer, void *function)
{
pthread_t recv_thread;
struct recv_args args;
args.server = server;
args.buffer = buffer;
return pthread_create(&recv_thread, NULL, function, &args);
}
void *listen_server(void *threadarg)
{
int result;
struct recv_args *my_data;
int server;
buffer_t *buffer;
my_data = (struct recv_args*)threadarg;
server = my_data->server;
buffer = my_data->buffer;
while (1)
{
result = recv(server, buffer->buffer_data, 2048, 0);
if (result > 0)
printf("%s %d bytes received through socket #%d\n", gettime(), result, server);
else if (result == 0)
printf("%s Connection to socket #%d closed\n", gettime(), server);
else
printf("%s recv error\n", gettime());
}
}