C 套接字发送失败会导致守护程序崩溃吗?

C 套接字发送失败会导致守护程序崩溃吗?,c,linux,sockets,unix,C,Linux,Sockets,Unix,我有两个应用程序在嵌入式Linux板上运行。一个作为守护进程运行,另一个作为它的接口。它们使用Unix套接字相互通信。 至于处理套接字的任何异常终止,我尝试终止接口应用程序[ctr+c]。但结果,守护程序应用程序崩溃。由于套接字被终止,我在守护进程端得到了套接字发送失败错误,这是预期的,但之后守护进程崩溃。 我不知道应该在哪里调试这个问题。是否已将守护进程中的套接字设置为非阻塞模式 假设您的代码如下所示: 而(1) { connfd=accept(listenfd,(struct sockadd

我有两个应用程序在嵌入式Linux板上运行。一个作为守护进程运行,另一个作为它的接口。它们使用Unix套接字相互通信。 至于处理套接字的任何异常终止,我尝试终止接口应用程序[ctr+c]。但结果,守护程序应用程序崩溃。由于套接字被终止,我在守护进程端得到了套接字发送失败错误,这是预期的,但之后守护进程崩溃。
我不知道应该在哪里调试这个问题。

是否已将守护进程中的套接字设置为非阻塞模式

假设您的代码如下所示:

而(1) { connfd=accept(listenfd,(struct sockaddr*)NULL,NULL)

}

根据手册页:

" 成功时,accept()返回一个非负整数,该整数是接受套接字的描述符。出现错误时,返回-1,并正确设置errno

如果队列上不存在挂起的连接,并且套接字未标记为非阻塞,则accept()将阻止调用方,直到连接存在。如果套接字标记为非阻塞,并且队列上不存在挂起的连接,则accept()将失败,错误为EAGAIN或ewoldblock。 "

因此,这意味着如果处于非阻塞模式,则应检查accept()的返回值,而不是直接使用它,因为fd值将为-1


以上只是一种常见的可能性。如果不是这样,您可以尝试使用“sudo strace-p process_id”或执行核心文件分析,以了解其崩溃的原因。

在套接字发送失败错误后,您是否检查了是否未使用套接字。因为此时套接字将无效。
/* then you use the fd */

func(connfd);