Socket GetSocketOption()/SetSocketOption与SendLowWater C#

Socket GetSocketOption()/SetSocketOption与SendLowWater C#,c#,.net,sockets,C#,.net,Sockets,在socket类中使用SendLowWater的GetSocketOption()和SetSocketOption()方法时遇到问题 我试着用 byte[] values = new byte[100]; sock.GetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, System.Net.Sockets.SocketOptionName.SendLowWater, values); 我在函数调用时遇到以下异常:在getsoc

在socket类中使用SendLowWater的GetSocketOption()和SetSocketOption()方法时遇到问题

我试着用

byte[] values = new byte[100];
sock.GetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, System.Net.Sockets.SocketOptionName.SendLowWater, values);
我在函数调用时遇到以下异常:在getsockopt或setsockopt调用中指定了未知、无效或不受支持的选项或级别

有人知道如何将GetSocketOption/SetSocketOption与SendLowWater一起使用吗

谢谢,,
kab

在我看来,错误信息是不言自明的:Windows不支持“发送低水位”选项

幸运的是,您并不真正需要此选项。它用于控制Winsock
select()
函数的行为,该函数在.NET中作为
Socket.select()
公开,有效使用.NET
Socket
类既不需要也不需要该函数。相反,您应该使用一种异步方法来使用
Socket


我个人的偏好是,现在C#具有
async
/
wait
功能,将
Socket
封装在
NetworkStream
中,并使用
Stream.ReadAsync()
Stream.WriteAsync()
方法。与其他异步方法一样,这些方法将使用IOCP来处理异步行为(Windows中最有效的I/O模型),但其方式要比其他两种基于套接字的异步方法方便得多。

在我看来,错误消息是不言自明的:“发送低水位”选项在Windows上不受支持

幸运的是,您并不真正需要此选项。它用于控制Winsock
select()
函数的行为,该函数在.NET中作为
Socket.select()
公开,有效使用.NET
Socket
类既不需要也不需要该函数。相反,您应该使用一种异步方法来使用
Socket


我个人的偏好是,现在C#具有
async
/
wait
功能,将
Socket
封装在
NetworkStream
中,并使用
Stream.ReadAsync()
Stream.WriteAsync()
方法。与其他异步方法一样,这些方法将使用IOCP来处理异步行为(Windows中最有效的I/O模型),但其方式要比其他两种基于套接字的异步方法方便得多。

在我看来,错误消息是不言自明的:“发送低水位”选项在Windows上不受支持

幸运的是,您并不真正需要此选项。它用于控制Winsock
select()
函数的行为,该函数在.NET中作为
Socket.select()
公开,有效使用.NET
Socket
类既不需要也不需要该函数。相反,您应该使用一种异步方法来使用
Socket


我个人的偏好是,现在C#具有
async
/
wait
功能,将
Socket
封装在
NetworkStream
中,并使用
Stream.ReadAsync()
Stream.WriteAsync()
方法。与其他异步方法一样,这些方法将使用IOCP来处理异步行为(Windows中最有效的I/O模型),但其方式要比其他两种基于套接字的异步方法方便得多。

在我看来,错误消息是不言自明的:“发送低水位”选项在Windows上不受支持

幸运的是,您并不真正需要此选项。它用于控制Winsock
select()
函数的行为,该函数在.NET中作为
Socket.select()
公开,有效使用.NET
Socket
类既不需要也不需要该函数。相反,您应该使用一种异步方法来使用
Socket

我个人的偏好是,现在C#具有
async
/
wait
功能,将
Socket
封装在
NetworkStream
中,并使用
Stream.ReadAsync()
Stream.WriteAsync()
方法。与其他异步方法一样,这些方法将使用IOCP来处理异步行为(Windows中最有效的I/O模型),但其方式要比其他两种基于套接字的异步方法方便得多。

您不需要

SocketOptionName.SendLowWater
对应于
SO\u SNDLOWAT
(4099),不支持该选项:

BSD UNIX中的套接字选项用于向后兼容。 此选项设置套接字要处理的最小字节数 输出操作

Windows TCP/IP提供程序不支持此选项。如果这 选项用于Windows Vista和更高版本的getsockopt和 setsockopt功能因WSAEINVAL故障而失效。关于早期版本的 在Windows中,这些函数会因WSAENOPROTOOPT而失败

Socket
类是Winsock函数的低级包装器,因此如果出现故障,通常可以通过计算操作对应的本机调用来查找更详细的信息(在本例中,
setsockopt

SocketOptionName.SendLowWater
对应于
SO\u SNDLOWAT
(4099),不支持该选项:

BSD UNIX中的套接字选项用于向后兼容。 此选项设置套接字要处理的最小字节数 输出操作

Windows TCP/IP提供程序不支持此选项。如果 选项用于Windows Vista和更高版本的getsockopt和 在早期版本的上,setsockopt功能因WSAEINVAL而失败 在Windows中,这些函数会因WSAENOPROTOOPT而失败

Socket
类是围绕Winsock函数的低级包装器