/// <devdoc> /// <para> /// IPv6 setsockopt for JOIN / LEAVE multicast group /// </para> /// </devdoc> private void setIPv6MulticastOption(SocketOptionName optionName, IPv6MulticastOption MR) { IPv6MulticastRequest ipmr = new IPv6MulticastRequest(); ipmr.MulticastAddress = MR.Group.GetAddressBytes(); ipmr.InterfaceIndex = unchecked((int)MR.InterfaceIndex); GlobalLog.Print("Socket#" + ValidationHelper.HashString(this) + "::setIPv6MulticastOption(): optionName:" + optionName.ToString() + " MR:" + MR.ToString() + " ipmr:" + ipmr.ToString() + " IPv6MulticastRequest.Size:" + IPv6MulticastRequest.Size.ToString()); // This can throw ObjectDisposedException. SocketError errorCode = UnsafeNclNativeMethods.OSSOCK.setsockopt( m_Handle, SocketOptionLevel.IPv6, optionName, ref ipmr, IPv6MulticastRequest.Size); GlobalLog.Print("Socket#" + ValidationHelper.HashString(this) + "::setIPv6MulticastOption() 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, "setIPv6MulticastOption", socketException); throw socketException; } }