[Mono-list] System.Net.TcpClient and IIS6?

Gonzalo Paniagua Javier reply.to.the.list.iam.suscribed@notexists.ximian.com
Wed, 08 Dec 2004 20:09:42 -0500

On Wed, 2004-12-08 at 14:05 +0000, rus wrote:
> Hi all
> I've been doing a little experiment with TcpClient (my first time ;))
> and seem to have stumbled across a difference between mono and ms.NET
> when talking to IIS6 servers.
> I've attached the source below (apologies for bad code - it's just a
> quick experiment to get used to the System.Net stuff)
> If I do..
> mono client.exe www.forgecom.info 80 "/"
> under mono (1.0.4 on FC3), the output cuts out in the middle of the
> response (not sure of the exact position (though it seems consistent).
> under .NET (1.1 on windows 2000), the output is complete.  I've not
> tested it using mono on win32, by the way.
> I've compiled the source using the command:
> mcs -t:exe -out:client.exe TcpClient.cs
> under mono (1.0.4 on FC3) and run the same resulting exe on both
> systems.
> >From my tests so far, mono only seems to have a problem when talking to
> IIS6. IIS5 and apache seem ok!
> Is this a bug or am I missing something?

The problem is in your test code:
do {
       bufferSize = client.ReceiveBufferSize;
       readBytes = new byte[bufferSize];
       net.Read(readBytes, 0, bufferSize);
       result += Encoding.ASCII.GetString(readBytes);
} while(net.DataAvailable);

The condition 'net.DataAvailable' might be false at a certain point. Ie,
there might not be data to read but it will be there soon.

You better use Read (or may be Poll/Read).