public void InitTCP() { if (OwningConnection.MyTCPSocket != null) { m_RecArgs = SocketAsyncEventArgsCache.PopReadEventArg(new EventHandler <SocketAsyncEventArgs>(IO_Completed), OwningConnection.MyTCPSocket); m_SendArgs = SocketAsyncEventArgsCache.PopSendEventArg(new EventHandler <SocketAsyncEventArgs>(IO_Completed), OwningConnection.MyTCPSocket); } else { throw new ArgumentException("AsynchTransitStrategy can't initialize TCP until the NetworkConnection has a valid TCPSocket. Currently TCPSocket is null."); } }
public bool StartListening(AddressFamily family, int port, int maxSimultaneousListens, Func <IPEndPoint, INetworkConnection> getConMethod) { try { GetConnnection = getConMethod; if (Socket == null) { //// Log.LogMsg("Testy 30"); Socket = new System.Net.Sockets.Socket(family, SocketType.Dgram, ProtocolType.Udp); //// Log.LogMsg("Testy 31"); Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); //// Log.LogMsg("Testy 32"); Socket.ExclusiveAddressUse = false; //// Log.LogMsg("Testy 33"); if (family == AddressFamily.InterNetworkV6) { //// Log.LogMsg("Testy 34"); Socket.SetSocketOption(SocketOptionLevel.IPv6, (SocketOptionName)27, 0); // set IPV6Only to false. enables dual mode socket - V4+v6 //// Log.LogMsg("Testy 35"); Socket.Bind(new IPEndPoint(IPAddress.IPv6Any, port)); //// Log.LogMsg("Testy 36"); } else { //// Log.LogMsg("Testy 37"); Socket.Bind(new IPEndPoint(IPAddress.Any, port)); } } //// Log.LogMsg("Testy 38"); Port = ((IPEndPoint)Socket.LocalEndPoint).Port; m_ListenArgs = new List <SocketAsyncEventArgs>(maxSimultaneousListens); for (int i = 0; i < maxSimultaneousListens; i++) { //// Log.LogMsg("Testy 39"); SocketAsyncEventArgs arg = SocketAsyncEventArgsCache.PopReadEventArg(new EventHandler <SocketAsyncEventArgs>(ReadCompleted), Socket); if (family == AddressFamily.InterNetworkV6) { arg.RemoteEndPoint = new IPEndPoint(IPAddress.IPv6Any, 0); } else { arg.RemoteEndPoint = new IPEndPoint(IPAddress.Any, 0); } //// Log.LogMsg("Testy 40"); m_ListenArgs.Add(arg); //// Log.LogMsg("Testy 41"); bool willRaiseEvent = Socket.ReceiveFromAsync(arg); //// Log.LogMsg("Testy 999"); if (!willRaiseEvent) { //// Log.LogMsg("Testy 42"); OnReceiveResolved(arg); } } } catch (Exception e) { Log.LogMsg("UDPListener - error start listen: " + e.Message); return(false); } Listening = true; Log.LogMsg("UDPListener - Listening for UDP traffic on port " + port.ToString() + " with " + maxSimultaneousListens.ToString() + " max listeners."); return(true); }