public static unsafe SocketError SetSockOpt(SafeSocketHandle handle, SocketOptionLevel optionLevel, SocketOptionName optionName, int optionValue) { SocketError errorCode; if (optionLevel == SocketOptionLevel.Tcp && (optionName == SocketOptionName.TcpKeepAliveTime || optionName == SocketOptionName.TcpKeepAliveInterval) && IOControlKeepAlive.IsNeeded) { errorCode = IOControlKeepAlive.Set(handle, optionName, optionValue); } else { errorCode = Interop.Winsock.setsockopt( handle, optionLevel, optionName, ref optionValue, sizeof(int)); } return(errorCode == SocketError.SocketError ? GetLastSocketError() : SocketError.Success); }
public static unsafe SocketError SetSockOpt(SafeSocketHandle handle, SocketOptionLevel optionLevel, SocketOptionName optionName, byte[] optionValue) { SocketError errorCode; if (optionLevel == SocketOptionLevel.Tcp && (optionName == SocketOptionName.TcpKeepAliveTime || optionName == SocketOptionName.TcpKeepAliveInterval) && IOControlKeepAlive.IsNeeded) { return(IOControlKeepAlive.Set(handle, optionName, optionValue)); } fixed(byte *optionValuePtr = optionValue) { errorCode = Interop.Winsock.setsockopt( handle, optionLevel, optionName, optionValuePtr, optionValue != null ? optionValue.Length : 0); return(errorCode == SocketError.SocketError ? GetLastSocketError() : SocketError.Success); } }