G'day,
I'm writing a small proxy. Basically I spawn a thread for each client that connects, and use blocking sockets (with timeouts) to service the client.
However, with that approach I've run into a snag. Basically my pseudo code is:
Code:
while(client or server connection open)
{
buffer = read_from_client()
send_to_server(buffer)
buffer = read_from_server() /* blocks here */
send_to_client(buffer)
}
However, the server doesn't want to send me any data yet. Since it's waiting for the full client request. So the call basically blocks forever.
I've thought of peeking at the server socket to see if there's any data to read, and skipping it if not. However, MSG_PEEK has bad performance. Even though I'm only targeting around 64 client threads at a given time.
So what would be the suggested route here? I could peek, or multiplex between the client and server socket (i.e. with select())? But I'm sure that would hurt performance (each thread would then need to multiplex.
[edit]
MSG_PEEK isn't an option. It's recommended against using it in Winsock (I'm targeting Windows and Linux).
select() or poll() aren't really options.
Could I just use non-blocking sockets in a loop? Although that may mean I'm using a lot of CPU just to see if data arrived.
[/edit]
Thanks!
Zac