[Mono-bugs] [Bug 70827][Nor] New - Reading from an Empty Non-Blocking socket will (Incorrectly) close the Socket
bugzilla-daemon@bugzilla.ximian.com
bugzilla-daemon@bugzilla.ximian.com
Mon, 27 Dec 2004 13:42:52 -0500 (EST)
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by scott@imeem.com.
http://bugzilla.ximian.com/show_bug.cgi?id=70827
--- shadow/70827 2004-12-27 13:42:52.000000000 -0500
+++ shadow/70827.tmp.29598 2004-12-27 13:42:52.000000000 -0500
@@ -0,0 +1,58 @@
+Bug#: 70827
+Product: Mono: Class Libraries
+Version: 1.1
+OS: Red Hat 9.0
+OS Details:
+Status: NEW
+Resolution:
+Severity:
+Priority: Normal
+Component: System
+AssignedTo: mono-bugs@ximian.com
+ReportedBy: scott@imeem.com
+QAContact: mono-bugs@ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: Reading from an Empty Non-Blocking socket will (Incorrectly) close the Socket
+
+Please fill in this template when reporting a bug, unless you know what you are doing.
+Description of Problem:
+Reading from a non-Blocking socket when no data is availabled causes the socket to close.
+This is different from the .Net behaviour.
+
+
+Steps to reproduce the problem:
+IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),80);
+// pick a destination which doesn't send data back
+Socket sock = new (Socket(endPoint,AddressFamily, SocketType.Stream,
+ProtocolType.Tcp);
+sock.Connect(endPoint);
+
+if(sock.Connected) {
+ try {
+ sock.Blocking = false;
+ byte[] test = new byte[8];
+ sock.Receive(test);
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Connected = " + sock.Connected);
+ }
+}
+
+Actual Results:
+Mono will output "Connected = false", the socket is now useless
+
+Expected Results:
+.Net will output "Connected = true", the socket may still be used for reading and writing
+
+How often does this happen?
+Always
+
+Additional Information:
+It looks like Receive_internal checks for an error code, if this is set it closes the connection
+without actually checking what the error code is, there are many error codes which are more
+informative and do not indicate a failure in the underlying tcp socket. The type of code should be
+checked and the socket should only be closed if the error indicates the underlying connection is
+broken.