我应该如何检查(TCP)套接字以确定它是否已连接?
我已经阅读了MSDN中的Socket.Connected属性,但它说它只根据最后一个I/O显示状态.这对我没用,因为我想在尝试从套接字读取之前这样做.备注部分还指出:
如果需要确定连接的当前状态,请进行非阻塞,零字节发送调用.如果调用成功返回或抛出WAEWOULDBLOCK错误代码(10035),则套接字仍然连接; 否则,套接字不再连接.
同一页面上的示例显示了如何执行此操作.(1)但Ian Griffiths的帖子说我应该从套接字读取,而不是通过它发送.
...在你打电话之后
Shutdown(),打电话Receive()直到它返回0(假设远程端点实际上不会向你发送任何东西,一旦远程端点收到你的所有数据就会发生这种情况).除非您这样做,否则您无法保证远程端点实际上已收到您发送的所有数据,即使使用延迟套接字也是如此.
我真的不明白他关于调用Receive()以确保远程端点实际上已经收到我发送的所有数据的说法.(套接字阻塞接收,直到发送缓冲区为空?)
我对提出的不同方法感到困惑.你能解释一下吗?
(1)但不知为何,例如为Socket.Connected属性分配1字节的数组,即使它调用Send与0长度?