我有一个服务器套接字,我已将其配置为一次允许一个连接(通过使用信号量阻止接受调用),积压队列大小为 1。也就是说,我调用了 .Listen(1)。
然后我遵循以下过程:
- 我在服务器套接字上调用 AcceptAsync(仅一次)
- 我有一个客户端 ConnectAsync(连接成功)
- 我有一个客户端 ConnectAsync (连接成功,据说在队列中......一种告诉方式会很好)
- 我有第三个客户端 ConnectAsync
这三个 ConnectAsync 调用快速连续发生。
第三个 ConnectAsync 的预期结果是使 SocketAsyncEventArgs“SocketError”属性不是“SocketError.Success”。我实际上希望“SocketError.ConnectionRefused”是具体的。
大约 95% 的时间都是这种情况。第三个客户端的回调给了我一个 SocketError 值而不是 Success。
但是,第三个 ConnectAsync 时不时地“工作”,就像第二个一样。EventArgs.SocketError 给了我 SocketError.Success,相应的 Socket.Connected 属性为“true”。
这是怎么回事?我只调用了一次AcceptAsync (我已经用断点仔细验证了这一点),所以应该只接受一个客户端,其余的应该在积压队列中。我的队列大小是 1,那么第三个客户端如何不时连接成功?
请不要告诉我使用更大的队列大小。这是针对我编写的测试功能,而不是主动为客户服务的代码。这个时候就比较好奇了。:)