gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:38:16 26 4
gpt4 key购买 nike

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

最佳答案

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

假设您的代码如下所示:

同时(1){ connfd = 接受(listenfd, (struct sockaddr*)NULL, NULL);

/* then you use the fd */

func(connfd);

}

基于手册页:

”成功时,accept() 返回一个非负整数,它是已接受套接字的描述符。出错时,返回 -1,并适当设置 errno。

如果队列中不存在挂起的连接,并且套接字未标记为非阻塞,则accept() 会阻塞调用方,直到存在连接。如果套接字被标记为非阻塞并且队列中不存在挂起的连接,则accept() 会失败并出现错误EAGAIN 或EWOULDBLOCK。”

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

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

关于套接字发送失败会导致守护程序崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29819734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com