我有一个应用程序,它在端口号5005上与另一个设备(带有Web服务器的硬件设备)建立了套接字连接.
现在,如果我的硬件设备断开连接,那么我将断开与设备的连接.
这是否意味着我现在使用的套接字变为无效.
发生此断开连接时,是否会收到任何特殊消息,如空字符或其他内容.
谢谢
Rob*_*nes 35
当recv返回值为0,这意味着在连接已被关闭.
请参见recv手册页:
这些调用返回接收的字节数,如果发生错误则返回-1.当对等体执行有序关闭时,返回值将为0.
在回答问题#1时,是套接字现在无效.您必须创建新的套接字和连接以进行进一步的通信.
编辑
现在正如valdo在下面指出的那样,也有可能有一个半封闭的TCP连接,你不能再接收它,但你可以继续写入套接字,直到你完成数据发送.有关更多详细信息,请参阅此文章: TCP Half-Close.听起来不像你有这种情况.
在回答问题#2时,基本上有两种方法来检测闭合的套接字.这假设套接字经历了有序关闭,这意味着对等体称为shutdown或者close.
第一种方法是从套接字读取,在这种情况下,返回值为0.另一种方法是写入套接字,这将导致抛出SIG_PIPE信号,指示管道损坏.
为了避免信号,您可以设置MSG_NOSIGNAL套接字选项,在这种情况下send返回-1并设置errno为EPIPE.
val*_*ldo 10
同意Robert S. Barnes.除了声称套接字现在"无效".
它仍然有效.你可以使用它.您甚至可以将数据发送给对等方.你唯一不能做的就是打电话recv.