Browse Source

Returning during Send in case of error. Splitting send and receive into separate tasks in test.

Dave Curylo 9 years ago
parent
commit
bf58ae6aae

+ 1 - 0
mcs/class/System/System.Net.Sockets/Socket.cs

@@ -2464,6 +2464,7 @@ namespace System.Net.Sockets
 				if (error != SocketError.Success && error != SocketError.WouldBlock && error != SocketError.InProgress) {
 					is_connected = false;
 					is_bound = false;
+					break;
 				} else {
 					is_connected = true;
 				}

+ 16 - 11
mcs/class/System/Test/System.Net.Sockets/SocketTest.cs

@@ -2633,22 +2633,27 @@ namespace MonoTests.System.Net.Sockets
 				sendbuf[i] = (byte)i;
 			}
 
-			SocketError err;
-			int sent = sendsock.Send (sendbuf);
+			Task sendTask = Task.Factory.StartNew(() => {
+				int sent = sendsock.Send (sendbuf);
 
-			Assert.AreEqual (BUFFER_SIZE, sent, "#1");
+				Assert.AreEqual (BUFFER_SIZE, sent, "#1");
+			});
 
 			byte[] recvbuf = new byte[BUFFER_SIZE];
 
-			int totalReceived = 0;
-			byte[] buffer = new byte[256];
-			while (totalReceived < sendbuf.Length) {
-				int recvd = clientsock.Receive (buffer, 0, buffer.Length, SocketFlags.None);
-				buffer.CopyTo (recvbuf, totalReceived);
-				totalReceived += recvd;
-			}
+			Task recvTask = Task.Factory.StartNew(() => {
+				int totalReceived = 0;
+				byte[] buffer = new byte[256];
+				while (totalReceived < sendbuf.Length) {
+					int recvd = clientsock.Receive (buffer, 0, buffer.Length, SocketFlags.None);
+					buffer.CopyTo (recvbuf, totalReceived);
+					totalReceived += recvd;
+				}
+
+				Assert.AreEqual (BUFFER_SIZE, totalReceived, "#2");
+			});
 
-			Assert.AreEqual (BUFFER_SIZE, totalReceived, "#2");
+			Task.WaitAll (new []{sendTask, recvTask});
 
 			for (i = 0; i < BUFFER_SIZE; i++) {
 				Assert.AreEqual (recvbuf[i], sendbuf[i],