gpt4 book ai didi

c# - 测试 I/O 完成端口支持

转载 作者:太空狗 更新时间:2023-10-29 12:21:43 25 4
gpt4 key购买 nike

我在 SMTP 邮件服务器 ( LumiSoft Mail Server ) 的代码中找到了以下代码。根据方法名,测试平台是否支持I/O Completion Ports .

/// <summary>
/// Gets if IO completion ports supported by OS.
/// </summary>
/// <returns></returns>
public static bool IsIoCompletionPortsSupported()
{
Socket s = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
try{
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.SetBuffer(new byte[0],0,0);
e.RemoteEndPoint = new IPEndPoint(IPAddress.Loopback,111);
s.SendToAsync(e)

return true;
}

catch(NotSupportedException nX){
string dummy = nX.Message;
return false;
}
finally{
s.Close();
}
}

它似乎工作正常但在 Mono/Linux 上失败。 SendToAsync 方法,正如其名称所示,异步执行。它甚至在另一个线程中执行。但是,当它开始执行时,该方法的 finally 部分已经关闭套接字并导致另一个线程中的 ObjectDisposedException

那么,测试 IOCP 支持的技术不正确吗?为什么它适用于 Windows?测试 IOCP 支持的正确方法是什么?

最佳答案

该测试只是确定异步操作是否会导致 NotSupportedException。测试代码不关心异步操作是否完成,它只关心调用时是否抛出异常。

编写测试的人可能假设异步操作暗示 IOCP 支持,并且该测试应该真正命名为“IsAsyncOperationSupported()”。

我想由于缺乏 IOCP 支持,mono/linux 并不支持所有地方的异步操作,并且编写测试的人知道这一点......

关于c# - 测试 I/O 完成端口支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com