阅读 MSDN 页面,很明显如果套接字传输层中没有内部缓冲区,Send 将阻塞。这实际上是一件好事,因为我宁愿没有 NoBufferSpaceAvailable 错误。我的理解是传输缓冲区空间很大,但是如果 Send 限制了一些东西以防止这些错误,我很高兴。
但是,尚不清楚还有什么会导致 Send 阻塞。我的猜测是它不会阻塞等待发送的确认,并且发送只会将数据排队到传输缓冲区并返回。
非常糟糕的是,如果 Send 确实阻塞,直到特定套接字实际上完全阻塞,直到传输完成。如果是这种情况,那么 1000 个中的一个慢速连接可能会减慢整个发送过程。在那种情况下, SendAsync 真的是强制性的。
有人对此有更多详细信息吗?