private void Accept_Callback(IAsyncResult ar) { InitiatorContext context = (InitiatorContext)ar.AsyncState; try { Socket socket = context.Socket.EndAccept(ar); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _connectionTimeout); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _receiveTimeout); socket.NoDelay = true; socket.LingerState = new LingerOption(false, 0); IPEndPoint remoteIp = socket.RemoteEndPoint as IPEndPoint; PeerConnection connection = new PeerConnection(socket, remoteIp, null); Connected(connection); } catch (Exception ex) { Debug.WriteLine("Failed to connect: " + ex.Message); ConnectFailed(this); } finally { PostAccept(context); } }
private void PostAccept(InitiatorContext context) { Socket socket = new Socket(context.Endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _connectionTimeout); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _receiveTimeout); socket.NoDelay = true; socket.LingerState = new LingerOption(false, 0); context.Socket.BeginAccept(socket, 0, Accept_Callback, context); }
public void Connect(EndPoint endpoint) { Socket socket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _connectionTimeout); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _receiveTimeout); socket.NoDelay = true; socket.LingerState = new LingerOption(false, 0); // InitiatorContext context = new InitiatorContext(socket, endpoint); socket.BeginConnect(endpoint, Connect_Callback, context); }
public void Listen(IPEndPoint endpoint) { Socket socket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, _connectionTimeout); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _receiveTimeout); socket.NoDelay = true; socket.LingerState = new LingerOption(false, 0); InitiatorContext context = new InitiatorContext(socket, endpoint); socket.Bind(endpoint); socket.Listen(_pendingConnectionQueueDepth); PostAccept(context); }
private void Connect_Callback(IAsyncResult ar) { try { InitiatorContext context = (InitiatorContext)ar.AsyncState; context.Socket.EndConnect(ar); PeerConnection connection = new PeerConnection(context.Socket, context.Endpoint, null); Connected(connection); } catch (Exception ex) { Debug.WriteLine("Failed to connect: " + ex.Message); ConnectFailed(this); } }