Переглянути джерело

[System] Use mono specific payload type for EndAccept of TCPListener

Marek Safar 9 роки тому
батько
коміт
d70b715a96

+ 22 - 0
mcs/class/System/Test/System.Net.Sockets/TcpListenerTest.cs

@@ -219,5 +219,27 @@ namespace MonoTests.System.Net.Sockets
 			listen.Start (65536);
 			listen.Stop ();
 		}
+
+		[Test]
+#if FEATURE_NO_BSD_SOCKETS
+		[ExpectedException (typeof (PlatformNotSupportedException))]
+#endif
+		public void EndAcceptTcpClient ()
+		{
+			var port = NetworkHelpers.FindFreePort ();
+
+			var listenerSocket = new TcpListener (IPAddress.Any, port);
+			listenerSocket.Start ();
+			listenerSocket.BeginAcceptTcpClient (new AsyncCallback (l => {
+				listenerSocket.EndAcceptTcpClient (l);
+			}), null);
+
+
+			using (var outClient = new TcpClient ("localhost", port)) {
+				using (var stream = outClient.GetStream ()) {
+					stream.WriteByte (3);
+				}
+			}
+		}
 	}
 }

+ 10 - 0
mcs/class/referencesource/System/net/System/Net/Sockets/TCPListener.cs

@@ -285,8 +285,13 @@ namespace System.Net.Sockets {
                 throw new ArgumentNullException("asyncResult");
             }
 
+#if MONO
+            var sar = asyncResult as SocketAsyncResult;
+            Socket asyncSocket = sar == null ? null : sar.socket;
+#else
             LazyAsyncResult lazyResult = asyncResult as LazyAsyncResult;
             Socket asyncSocket = lazyResult == null ? null : lazyResult.AsyncObject as Socket;
+#endif
             if (asyncSocket == null)
             {
                 throw new ArgumentException(SR.GetString(SR.net_io_invalidasyncresult), "asyncResult");
@@ -318,8 +323,13 @@ namespace System.Net.Sockets {
                 throw new ArgumentNullException("asyncResult");
             }
 
+#if MONO
+            var sar = asyncResult as SocketAsyncResult;
+            Socket asyncSocket = sar == null ? null : sar.socket;
+#else
             LazyAsyncResult lazyResult = asyncResult as LazyAsyncResult;
             Socket asyncSocket = lazyResult == null ? null : lazyResult.AsyncObject as Socket;
+#endif
             if (asyncSocket == null)
             {
                 throw new ArgumentException(SR.GetString(SR.net_io_invalidasyncresult), "asyncResult");