|
|
1
21
套接字的死亡会以多种方式改变其行为,因此这些方法都是有效的:) 使用这两种方法,您实际上可以检查在断开连接后发生变化的套接字行为的那些部分。
当插座连接时,
打电话
什么时候?
当插座处于断开状态时,
您可以使用任何您喜欢的方法,因为它们都不消耗资源。只要它们用于插座连接检查,它们是相同的。
至于我,我更喜欢
|
|
|
2
4
“如果需要确定连接的当前状态,请进行一个非阻塞的零字节发送调用。如果调用成功返回或抛出一个waewouldBlock错误代码(10035),那么套接字仍处于连接状态;否则,套接字将不再连接。“——不幸的是,它甚至无法工作!
bConnected始终以true结束,即使已拔下以太网电缆,呼叫也始终成功返回。 而且,不幸的是,==发送任何实际数据也不会检测到断开的连接。
重复返回1,就好像真的发送了什么。而问题设备甚至不再连接。 |
|
|
3
1
通常会使用socket.select方法来确定一组套接字的状态(socket.poll用于单个套接字)。 这两种方法都允许您查询套接字的状态。现在,假设您已经跟踪了第一个连接的套接字,那么您通常会在尝试读取之前调用套接字上的select/poll。如果select/poll指示套接字可读,则说明:
就我个人而言,我从来没有使用过poll——我一直使用select,但msdn似乎建议,poll与select几乎相同,只是用于单套接字。 我还要补充一点,在大多数情况下,使用select是处理套接字连接的最有效和最好的方法。 |
|
|
4
1
@peteduniho的帖子不是关于建立连接状态的,而是关于以一种您知道对等端何时接收到您的所有数据的方式终止连接。
不,但是如果您关闭套接字,然后读取到EOS,那么您将等待对等机读取所有数据,直到 他 获取eos,然后关闭套接字。因此,您可以保证所有数据都已进入对等应用程序。 |