Hi All,

 

I am trying to write a multi-threaded echo server program. But facing
some problem with it... 

 

My main program creates a pool of worker threads and then accepts new
connections from the clients. Main thread and worker threads share a
queue that contains the file descriptor of the different clients. 

After spawning the worker threads, main thread falls into the infinite
loop where it accepts the new connections and put the client file
descriptor in queue. Worker threads check in an infinite loop, if there
is any data to receive from existing clients by using select
call(passing NULL as timeout value, so it just hangs indefinitely), and
if there is any then it will handle the request and send the same to the
client like a typical echo server program. If there is a request to
close a connection from client side then worker threads are responsible
for deleting the corresponding file descriptor from queue.

 

But the problem is that, only one thread was doing all the work
(handling all the connections), other threads are just blocking in
select()  system call even when all of them have the same information. 

But, I am not able to understand why other threads select() didn't get
any response when the file descriptors change their status?

Isn't this nice if either the thread library or the OS balance the work
between different threads especially when all of them are waiting on
similar condition?

 

-- 

Regards,

Gaurav Aggarwal

 

Reply via email to