private static MyNetworkStream CreateSocketStream(MySqlConnectionStringBuilder settings, IPAddress ip, bool unix) { EndPoint remoteEP; if (!Platform.IsWindows() & unix) { remoteEP = MyNetworkStream.CreateUnixEndPoint(settings.Server); } else { remoteEP = new IPEndPoint(ip, (int)settings.Port); } Socket socket = unix ? new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP) : new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if (settings.Keepalive > 0u) { MyNetworkStream.SetKeepAlive(socket, settings.Keepalive); } IAsyncResult asyncResult = socket.BeginConnect(remoteEP, null, null); if (!asyncResult.AsyncWaitHandle.WaitOne((int)(settings.ConnectionTimeout * 1000u), false)) { socket.Close(); return(null); } try { socket.EndConnect(asyncResult); } catch (Exception) { socket.Close(); throw; } MyNetworkStream myNetworkStream = new MyNetworkStream(socket, true); GC.SuppressFinalize(socket); GC.SuppressFinalize(myNetworkStream); return(myNetworkStream); }