private static Socket GetSocket(NetworkArguments netArgs, CancellationToken token = default(CancellationToken)) { var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.ReceiveTimeout = netArgs.ReceiveTimeoutSeconds; client.SendTimeout = netArgs.SendTimeoutSeconds; client.LingerState = new LingerOption(netArgs.LingerArguments.Enable, netArgs.LingerArguments.Timeout); client.NoDelay = netArgs.NoDelay; ThrowIfCancelled(token); return(client); }
public async Task <IConnectedNetworkClient> Connect(NetworkArguments netArgs, CancellationToken token = default(CancellationToken)) { try { bool connected = true; Socket socket = GetSocket(netArgs, token); await Task.Run(() => { IAsyncResult result = socket.BeginConnect(GetEndpoint(netArgs), new AsyncCallback(ConnectCallBack), socket); connected = result.AsyncWaitHandle.WaitOne(netArgs.ConnectTimeoutSeconds * 1000, true); }); if (!connected && socket != null && !socket.Connected) { socket.Close(); } return(new ConnectedNetworkClient(new NetworkStream(socket, FileAccess.ReadWrite, true))); } catch (Exception ex) { //Console.WriteLine ("[NET-Factory] - exception when connecting ({0}:{1})", U.ExType (ex), U.InnerExMessage (ex)); throw MomNetworkException.ToMomException(ex, "[NET-Factory] - Connect"); } }
private static IPEndPoint GetEndpoint(NetworkArguments netArgs, CancellationToken token = default(CancellationToken)) { ThrowIfCancelled(token); return(new IPEndPoint(IPAddress.Parse(netArgs.Ip), netArgs.Port)); }