.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提升到自己的最小值,这至少为50。 只需使您的服务器具有单线程。然后它一次只处理一个连接。后续连接将在积压队列中等待。当积压队列已满时,如果服务器是Windows平台,则会“拒绝连接”。不是这样。     

要回复问题请先登录注册