Just spent ages trying to sort out a problem with some sockets code
under NT, and just discovered the bug may have been with Linux all
along.... (which I wasn't expecting at all).
Situation is as follows:
Server process on Linux box, client process on NT box.
NT box sends data packets (approx. 50 bytes each) at about 10 per second
by TCP - If it can't send it (due to network buffers being full), it
puts it into a user-space queue, which it tries to write out later on.
At the same time, the NT box is waiting for replies from the server
(also around 50 bytes each), and displays the data.
The Linux box waits for a packet, deals with the data (simulating lots
of processing by doing a sleep(5)), and then sends its reply. It
does no other network operations once it has read the data until it
writes the reply.
This works smoothly to start off with, until the recv buffer on the
Linux box becomes full, at which point all write operations get queued
within the kernel until the write buffer is full, at which point the
buffer is emptied.
This keeps on occuring.
Anyone got any ideas?
BTW, I'm using IPv4, and IPv6 is NOT enabled. Also, the same server
process running on a SPARC/Solaris 2 box works fine.
Thanks in advance,
Adrian St. John.
-- Adrian St. John Real Objects Ltd, Leamington Spa, England email: firstname.lastname@example.org email@example.com firstname.lastname@example.org Web: http://www.oot.co.uk/ Phone: +44 (0)1926 833488