![](/img/trans.png)
[英]Is "reading zero bytes" from a socket a valid way for monitoring a TCP/IP disconnect in POSIX C?
[英]How to ensure a posix c socket is still valid
我正在使用嵌入式 linux 内核 2.6 设备,需要知道以前建立的套接字是否仍然有效,而且我无法使用通常的发送函数执行此操作并检查返回值,因为如果我发送到无效的套接字描述符,我的应用程序将崩溃,Linux 将关闭我的进程。还有其他功能/建议吗?
编辑:设备中有一个已安装的应用程序管理器,当我尝试发送到不是引用打开的套接字的套接字描述符时,应用程序管理器将结束我的应用程序,然后如果我关闭套接字连接并尝试写入它,我的应用程序将被较低级别的应用程序管理器关闭。此外,我正在使用 TCP 套接字,WBr。
我认为这个问题要么是错误陈述的,要么是基于错误的前提。 通过另一个进程/主机的操作,套接字可能会异步地具有“无效”的感觉。 最接近的可能是套接字的另一端被关闭,这不会使您的套接字无效,但它确实会导致对您的套接字的后续写入导致EPIPE
错误和SIGPIPE
信号(如果未被阻塞)。 SIGPIPE
反过来默认终止您的进程。 如果这是您的问题,避免它的最简单方法是使用sigprocmask
/ pthread_sigmask
阻止SIGPIPE
,或使用signal(SIGPIPE, SIG_IGN)
忽略它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.