2015-04-23 58 views
-2

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

+0

你是否检查过你没有使用套接字发送失败后,套接字将无效。 – GingerJack

回答

0

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

假设你的代码如下所示:

而(1) { connfd =接受(listenfd,(结构sockaddr *)NULL,NULL);

/* then you use the fd */ 

func(connfd); 

}

基于手册页:

“ 成功时,accept()方法返回一个非负整数是接受套接字描述符上的错误,则返回-1 ,并且errno被适当地设定。

如果没有未决的连接存在于队列中,并且插座没有被标记作为非阻塞,accept()阻塞调用者,直到连接存在。如果套接字被标记为非阻塞,并且队列中不存在挂起连接,则accept()会失败,并显示错误EAGAIN或EWOULDBLOCK。 “

因此,这意味着,如果你在非阻塞模式中,应检查接受(返回值),而不是直接使用它,因为在FD值将为-1。

以上是只是一种常见的可能性,如果不是这种情况,你可以尝试使用“sudo strace -p process_id”或者执行核心文件分析来了解它为什么会崩溃