/// <summary> /// This method helps overcome what appears to be a problem in .NET MF v4.2 where Socket.Connect() /// may never return. /// </summary> /// <param name="ep"></param> private void CreateSocketAndConnect(IPEndPoint ep) { Exception exception = null; int retries = 1; while (retries > 0) { var t = new Thread(() => { try { CreateSocket(ep.GetAddressFamily()); _logger.LogMessage("Socket", LogLevel.Verbose, "Attempting connection to " + ep.Address); _socket.Connect(ep); _logger.LogMessage("Socket", LogLevel.Information, "Successfully connected to " + ep.Address); } catch (Exception ex) { _logger.LogMessage("Socket", LogLevel.Information, "Connection attempt failed for " + ep.Address + " Exception=" + ex); exception = ex; } }); t.Start(); if (!t.Join(10000)) { // If we timed out, we hit the bug. Try again. retries--; } else { if (exception != null) { throw exception; } break; } } }