On Tuesday, 29 April 2014 at 17:44:21 UTC, Tim wrote:
On Tuesday, 29 April 2014 at 17:35:08 UTC, Tim wrote:
On Tuesday, 29 April 2014 at 17:19:41 UTC, Adam D. Ruppe wrote:
On Tuesday, 29 April 2014 at 17:16:33 UTC, Tim wrote:
Is there anything I'm doing wrong?
You should be using a blocking socket. With them, the
operating system will put your thread on hold until a new
connection comes in. Without them, it will endlessly loop
doing absolutely nothing except checking if a new connection
is there yet. Horribly, horribly inefficient.
Alright, this would solve the server-cpu-usage-problem. But
what about incoming connections? When I create a new thread
and use non-blocking socket I've exactly the same problem. I
can also solve this problem by using blocking sockets, but
what happens if I do the following:
while(oMyBlockingSocket.isAlive)
{
oMyBlockingSocket.receive(...);
}
... and close the connection on the client side? I would never
receive anything and receive() waits never comes back or would
this throw an exception or similar?
Sorry... I totally forgot... I can use SocketSet's as I already
asked:
http://forum.dlang.org/thread/ogghezngzrvvoqaod...@forum.dlang.org#post-kivp3e:24jif:241:40digitalmars.com
... but I thought it's also possible using non blocking sockets
by using Thread.yield().
You want to add something like this to your while loop:
Thread.sleep( dur!("msecs")( 20 ) );
That will give back some time to the CPU.