internal static extern SocketError setsockopt( [In] SafeCloseSocket socketHandle, [In] SocketOptionLevel optionLevel, [In] SocketOptionName optionName, [In] ref IPMulticastRequest mreq, [In] int optionLength );
internal static extern SocketError getsockopt( [In] SafeCloseSocket socketHandle, [In] SocketOptionLevel optionLevel, [In] SocketOptionName optionName, [Out] out IPMulticastRequest optionValue, [In, Out] ref int optionLength );
internal static extern int setsockopt( [In] IntPtr socketHandle, [In] SocketOptionLevel optionLevel, [In] SocketOptionName optionName, [In] ref IPMulticastRequest mreq, [In] int optionLength );
internal static extern int getsockopt( [In] IntPtr socketHandle, [In] SocketOptionLevel optionLevel, [In] SocketOptionName optionName, [Out] out IPMulticastRequest optionValue, [In, Out] ref int optionLength );
private MulticastOption getMulticastOpt(SocketOptionName optionName) { IPMulticastRequest ipmr = new IPMulticastRequest(); int optlen = IPMulticastRequest.Size; // This can throw ObjectDisposedException. SocketError errorCode = UnsafeNclNativeMethods.OSSOCK.getsockopt( m_Handle, SocketOptionLevel.IP, optionName, out ipmr, ref optlen); GlobalLog.Print("Socket#" + ValidationHelper.HashString(this) + "::getMulticastOpt() UnsafeNclNativeMethods.OSSOCK.getsockopt returns errorCode:" + errorCode); // // if the native call fails we'll throw a SocketException // if (errorCode==SocketError.SocketError) { // // update our internal state after this socket error and throw // SocketException socketException = new SocketException(); UpdateStatusAfterSocketError(socketException); if(s_LoggingEnabled)Logging.Exception(Logging.Sockets, this, "getMulticastOpt", socketException); throw socketException; } #if BIGENDIAN ipmr.MulticastAddress = (int) (((uint) ipmr.MulticastAddress << 24) | (((uint) ipmr.MulticastAddress & 0x0000FF00) << 8) | (((uint) ipmr.MulticastAddress >> 8) & 0x0000FF00) | ((uint) ipmr.MulticastAddress >> 24)); ipmr.InterfaceAddress = (int) (((uint) ipmr.InterfaceAddress << 24) | (((uint) ipmr.InterfaceAddress & 0x0000FF00) << 8) | (((uint) ipmr.InterfaceAddress >> 8) & 0x0000FF00) | ((uint) ipmr.InterfaceAddress >> 24)); #endif // BIGENDIAN IPAddress multicastAddr = new IPAddress(ipmr.MulticastAddress); IPAddress multicastIntr = new IPAddress(ipmr.InterfaceAddress); MulticastOption multicastOption = new MulticastOption(multicastAddr, multicastIntr); return multicastOption; }
private void setMulticastOption(SocketOptionName optionName, MulticastOption MR) { IPMulticastRequest ipmr = new IPMulticastRequest(); ipmr.MulticastAddress = unchecked((int)MR.Group.m_Address); if(MR.LocalAddress != null){ ipmr.InterfaceAddress = unchecked((int)MR.LocalAddress.m_Address); } else { //this structure works w/ interfaces as well int ifIndex =IPAddress.HostToNetworkOrder(MR.InterfaceIndex); ipmr.InterfaceAddress = unchecked((int)ifIndex); } #if BIGENDIAN ipmr.MulticastAddress = (int) (((uint) ipmr.MulticastAddress << 24) | (((uint) ipmr.MulticastAddress & 0x0000FF00) << 8) | (((uint) ipmr.MulticastAddress >> 8) & 0x0000FF00) | ((uint) ipmr.MulticastAddress >> 24)); if(MR.LocalAddress != null){ ipmr.InterfaceAddress = (int) (((uint) ipmr.InterfaceAddress << 24) | (((uint) ipmr.InterfaceAddress & 0x0000FF00) << 8) | (((uint) ipmr.InterfaceAddress >> 8) & 0x0000FF00) | ((uint) ipmr.InterfaceAddress >> 24)); } #endif // BIGENDIAN GlobalLog.Print("Socket#" + ValidationHelper.HashString(this) + "::setMulticastOption(): optionName:" + optionName.ToString() + " MR:" + MR.ToString() + " ipmr:" + ipmr.ToString() + " IPMulticastRequest.Size:" + IPMulticastRequest.Size.ToString()); // This can throw ObjectDisposedException. SocketError errorCode = UnsafeNclNativeMethods.OSSOCK.setsockopt( m_Handle, SocketOptionLevel.IP, optionName, ref ipmr, IPMulticastRequest.Size); GlobalLog.Print("Socket#" + ValidationHelper.HashString(this) + "::setMulticastOption() UnsafeNclNativeMethods.OSSOCK.setsockopt returns errorCode:" + errorCode); // // if the native call fails we'll throw a SocketException // if (errorCode==SocketError.SocketError) { // // update our internal state after this socket error and throw // SocketException socketException = new SocketException(); UpdateStatusAfterSocketError(socketException); if(s_LoggingEnabled)Logging.Exception(Logging.Sockets, this, "setMulticastOption", socketException); throw socketException; } }
private MulticastOption getMulticastOpt(SocketOptionName optionName) { IPMulticastRequest ipmr = new IPMulticastRequest(); int optlen = IPMulticastRequest.Size; int errorCode = UnsafeNclNativeMethods.OSSOCK.getsockopt( m_Handle, SocketOptionLevel.IP, optionName, out ipmr, ref optlen ); // // if the native call fails we'll throw a SocketException // if (errorCode==SocketErrors.SocketError) { // // update our internal state after this socket error and throw // SocketException socketException = new SocketException(); UpdateStatusAfterSocketError(); throw socketException; } #if BIGENDIAN ipmr.MulticastAddress = (int) (((uint) ipmr.MulticastAddress << 24) | (((uint) ipmr.MulticastAddress & 0x0000FF00) << 8) | (((uint) ipmr.MulticastAddress >> 8) & 0x0000FF00) | ((uint) ipmr.MulticastAddress >> 24)); ipmr.InterfaceAddress = (int) (((uint) ipmr.InterfaceAddress << 24) | (((uint) ipmr.InterfaceAddress & 0x0000FF00) << 8) | (((uint) ipmr.InterfaceAddress >> 8) & 0x0000FF00) | ((uint) ipmr.InterfaceAddress >> 24)); #endif // BIGENDIAN IPAddress multicastAddr = new IPAddress(ipmr.MulticastAddress); IPAddress multicastIntr = new IPAddress(ipmr.InterfaceAddress); MulticastOption multicastOption = new MulticastOption(multicastAddr, multicastIntr); return multicastOption; }
private void setMulticastOption(SocketOptionName optionName, MulticastOption MR) { IPMulticastRequest ipmr = new IPMulticastRequest(); ipmr.MulticastAddress = unchecked((int)MR.Group.Address); ipmr.InterfaceAddress = unchecked((int)MR.LocalAddress.Address); #if BIGENDIAN ipmr.MulticastAddress = (int) (((uint) ipmr.MulticastAddress << 24) | (((uint) ipmr.MulticastAddress & 0x0000FF00) << 8) | (((uint) ipmr.MulticastAddress >> 8) & 0x0000FF00) | ((uint) ipmr.MulticastAddress >> 24)); ipmr.InterfaceAddress = (int) (((uint) ipmr.InterfaceAddress << 24) | (((uint) ipmr.InterfaceAddress & 0x0000FF00) << 8) | (((uint) ipmr.InterfaceAddress >> 8) & 0x0000FF00) | ((uint) ipmr.InterfaceAddress >> 24)); #endif // BIGENDIAN GlobalLog.Print("Socket#" + ValidationHelper.HashString(this) + "::setMulticastOption(): optionName:" + optionName.ToString() + " MR:" + MR.ToString() + " ipmr:" + ipmr.ToString() + " IPMulticastRequest.Size:" + IPMulticastRequest.Size.ToString()); int errorCode = UnsafeNclNativeMethods.OSSOCK.setsockopt( m_Handle, SocketOptionLevel.IP, optionName, ref ipmr, IPMulticastRequest.Size ); // // if the native call fails we'll throw a SocketException // if (errorCode==SocketErrors.SocketError) { // // update our internal state after this socket error and throw // SocketException socketException = new SocketException(); UpdateStatusAfterSocketError(); throw socketException; } }
private void setMulticastOption(SocketOptionName optionName, MulticastOption MR) { IPMulticastRequest mreq = new IPMulticastRequest(); mreq.MulticastAddress = (int) MR.Group.m_Address; if (MR.LocalAddress != null) { mreq.InterfaceAddress = (int) MR.LocalAddress.m_Address; } else { int num = IPAddress.HostToNetworkOrder(MR.InterfaceIndex); mreq.InterfaceAddress = num; } if (UnsafeNclNativeMethods.OSSOCK.setsockopt(this.m_Handle, SocketOptionLevel.IP, optionName, ref mreq, IPMulticastRequest.Size) != SocketError.SocketError) return; SocketException socketException = new SocketException(); this.UpdateStatusAfterSocketError(socketException); if (Socket.s_LoggingEnabled) Logging.Exception(Logging.Sockets, (object) this, "setMulticastOption", (Exception) socketException); throw socketException; }
private MulticastOption getMulticastOpt(SocketOptionName optionName) { IPMulticastRequest optionValue = new IPMulticastRequest(); int optionLength = IPMulticastRequest.Size; if (UnsafeNclNativeMethods.OSSOCK.getsockopt(this.m_Handle, SocketOptionLevel.IP, optionName, out optionValue, out optionLength) != SocketError.SocketError) return new MulticastOption(new IPAddress(optionValue.MulticastAddress), new IPAddress(optionValue.InterfaceAddress)); SocketException socketException = new SocketException(); this.UpdateStatusAfterSocketError(socketException); if (Socket.s_LoggingEnabled) Logging.Exception(Logging.Sockets, (object) this, "getMulticastOpt", (Exception) socketException); throw socketException; }
internal static extern SocketError getsockopt([In] SafeCloseSocket socketHandle, [In] SocketOptionLevel optionLevel, [In] SocketOptionName optionName, out IPMulticastRequest optionValue, [In, Out] ref int optionLength);
private MulticastOption getMulticastOpt(SocketOptionName optionName) { IPMulticastRequest optionValue = new IPMulticastRequest(); int size = IPMulticastRequest.Size; if (UnsafeNclNativeMethods.OSSOCK.getsockopt(this.m_Handle, SocketOptionLevel.IP, optionName, out optionValue, ref size) == SocketError.SocketError) { SocketException socketException = new SocketException(); this.UpdateStatusAfterSocketError(socketException); if (s_LoggingEnabled) { Logging.Exception(Logging.Sockets, this, "getMulticastOpt", socketException); } throw socketException; } IPAddress group = new IPAddress(optionValue.MulticastAddress); return new MulticastOption(group, new IPAddress(optionValue.InterfaceAddress)); }