[Mono-bugs] [Bug 79352][Wis] New - Problem with Socket.Poll method
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Mon Sep 11 06:41:30 EDT 2006
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 dmitryskey at hotmail.com.
http://bugzilla.ximian.com/show_bug.cgi?id=79352
--- shadow/79352 2006-09-11 06:41:30.000000000 -0400
+++ shadow/79352.tmp.22435 2006-09-11 06:41:30.000000000 -0400
@@ -0,0 +1,137 @@
+Bug#: 79352
+Product: Mono: Class Libraries
+Version: 1.0
+OS: Debian Woody
+OS Details:
+Status: NEW
+Resolution:
+Severity:
+Priority: Wishlist
+Component: System
+AssignedTo: mono-bugs at ximian.com
+ReportedBy: dmitryskey at hotmail.com
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: Problem with Socket.Poll method
+
+Description of Problem:
+
+I try to check connection to the host during the specified timeout. The
+Socket.Poll return true for the IP 1.1.1.1, timeout 5 seconds and
+SelectMode.SelectWrite parameter. The sample compiled mcs and executed
+under .Net Framework works fine. Mono 1.1.13, Debian Linux, VMWare 4.5.
+
+Steps to reproduce the problem:
+1.
+
+using System;
+using System.Net;
+using System.Net.Sockets;
+using System.Collections;
+
+namespace ConsoleApplication1
+{
+ /// <summary>
+ /// Summary description for Class1.
+ /// </summary>
+ ///
+
+ class Class1
+ {
+ /// <summary>
+ /// The main entry point for the application.
+ /// </summary>
+ [STAThread]
+ static void Main(string[] args)
+ {
+ //
+ // TODO: Add code to start application here
+ //
+
+ DateTime start = DateTime.Now;
+
+ try
+ {
+ CheckConnection("1.1.1.1", 8080, 5);
+ }
+ catch(Exception)
+ {
+ Console.Out.WriteLine("Test succeeded: " +
+DateTime.Now.Subtract(start).TotalSeconds.ToString() + " seconds");
+ return;
+ }
+
+ Console.Out.WriteLine("Test failed: " + DateTime.Now.
+Subtract(start).TotalSeconds.ToString() + " seconds");
+ return;
+ }
+
+ public static void CheckConnection(string host, int port, int
+timeout)
+ {
+ using(Socket sock = new Socket(AddressFamily.
+InterNetwork, SocketType.Stream, ProtocolType.Tcp))
+ {
+ bool isConnected = false;
+
+ IPHostEntry entries = Dns.GetHostByName(host);
+ foreach (IPAddress ipAddr in entries.AddressList)
+ {
+ sock.Blocking = false;
+ try
+ {
+ sock.Connect(new IPEndPoint(ipAddr,
+port));
+ }
+ catch (SocketException ex)
+ {
+ Console.Out.WriteLine(ex.ErrorCode.
+ToString());
+ // ignore errors:
+ // Resource temporarily unavailable.
+ // Operation now in progress.
+ if (ex.ErrorCode != 10035 && ex.
+ErrorCode != 10036)
+ throw;
+
+ }
+
+ isConnected = sock.Poll(timeout * 1000000,
+SelectMode.SelectWrite);
+ Console.Out.WriteLine(ipAddr.ToString() + ":"
++ isConnected.ToString());
+
+ if (isConnected)
+ break;
+ }
+
+ if (!isConnected)
+ throw new Exception();
+ }
+ }
+ }
+}
+
+Actual Results:
+
+10035
+1.1.1.1:True
+Test failed: 0.187176 seconds
+
+Expected Results:
+
+This code is working fine on .Net framework with the following output:
+
+10035
+1.1.1.1:False
+Test succeeded: 5,035739 seconds
+
+How often does this happen?
+
+Very often (sometimes this test is passed well)
+
+Additional Information:
+
+Debian is running under VMWare 4.5
More information about the mono-bugs
mailing list