// Only for use by UdpConnector. internal UdpSocket( Communicator communicator, IConnector connector, EndPoint addr, IPAddress?sourceAddr, string?multicastInterface, int multicastTtl) { _communicator = communicator; _connector = connector; _addr = (IPEndPoint)addr; _multicastInterface = multicastInterface; _incoming = false; if (sourceAddr != null) { _sourceAddr = new IPEndPoint(sourceAddr, 0); } Socket = Network.CreateSocket(true, _addr.AddressFamily, _connector); try { Network.SetBufSize(Socket, _communicator, Transport.UDP); _rcvSize = (int)Socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer) !; _sndSize = (int)Socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendBuffer) !; if (Network.IsMulticast(_addr)) { if (_multicastInterface != null) { Debug.Assert(_multicastInterface.Length > 0); Network.SetMulticastInterface(Socket, _multicastInterface, _addr.AddressFamily); } if (multicastTtl != -1) { Network.SetMulticastTtl(Socket, multicastTtl, _addr.AddressFamily); } } } catch (SocketException ex) { Socket.CloseNoThrow(); throw new TransportException(ex, RetryPolicy.NoRetry, _connector); } }