Socket server + thread: cpu usage
Tim via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu May 1 01:10:10 PDT 2014
On Thursday, 1 May 2014 at 08:08:37 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.
>
> Blocking sockets are now working as expected, but I've one
> problem. When I do the following in my server-accept-thread:
>
> while (m_oSocket.isAlive)
> {
> oSocketSet.reset();
> oSocketSet.add(m_oSocket);
>
> nAcceptedSockets = Socket.select(oSocketSet, null, null,
> 25.msecs);
>
> if (nAcceptedSockets > 0)
> {
> // Do something...
> }
>
> }
>
> ... and the following in my client:
>
> void connect()
> {
> m_oSocket = new TcpSocket(AddressFamily.INET);
> m_oSocket.connect(new InternetAddress("127.0.0.1", 12345));
> }
>
> The CPU usage is low as long as my connect is connected. When I
> disconnect the client using the following few lines:
>
> void disconnect()
> {
> m_oSocket.shutdown(SocketShutdown.BOTH);
> m_oSocket.close();
> }
>
> ... the CPU usage goes up. I think that SocketShutdown.BOTH
> causes Socket.select to fail which results in an endless loop.
> Any suggestions how to handle that problem?
>
> @Ali Çehreli: Thanks, didn't know that UFCS can also handle
> such constructs :)
Small correction: "The CPU usage is low as long as my client is
connected. When I disconnect the client using the following few
lines:"
More information about the Digitalmars-d-learn
mailing list