.NET Socket监听积压
我有一个服务器套接字,我已经配置为允许一次连接(通过使用信号量阻止Accept调用),积压队列大小为1.也就是说,我调用了.Listen(1)。
然后我按照以下过程:
我在服务器套接字上调用AcceptAsync(只有一次)
我有一个客户端ConnectAsync(成功连接)
我有一个客户端ConnectAsync(成功连接,据说在队列中...一种告诉的方式会很好)
我有第三个客户端ConnectAsync
这三个ConnectAsync调用快速连续发生。
第三个ConnectAsync的预期结果是使SocketAsyncEventArgs“SocketError”属性不是“SocketError.Success”。我实际上期望“SocketError.ConnectionRefused”具体。
大约95%的时间都是这种情况。第三个客户端的回调给了我一个除Success之外的SocketError值。
但是,偶尔会有第三个ConnectAsync“工作”,就像第二个一样。 EventArgs.SocketError为我提供了SocketError.Success,相应的Socket.Connected属性显示为“true”。
这是怎么回事?我只调用了一次AcceptAsync(我已经用断点仔细验证了这一点),因此只接受一个客户端,其余客户端应该在积压队列中。我的队列大小是1,那么第三个客户端如何连续成功连接?
请不要告诉我使用更大的队列大小。这是我编写的测试函数,而不是主动为客户提供服务的代码。在这一点上,它更加好奇。 :)
没有找到相关结果
已邀请:
1 个回复
抬澈帅沮