gdb结合coredump定位崩溃进程
内核模块编译

unix domain socket相关

lazycat posted @ 2012年2月13日 15:33 in linux , 2147 阅读

1.关于SIGPIPE信号

今天测试代码发现,当已经建立了Stream连接的DomainSocket的服务端进程终止后,客户端进程调用send函数导致客户端进程也退出了的情况。

上网搜了一下,发现是客户端进程收到了一个SIGPIPE信号,信号默认的执行动作是终止退出。

解决办法应该是使用

 

signal(SIGPIPE, SIG_IGN);

忽略SIGPIPE信号。

这样在断开连接后,还继续调用send的情况下,会返回-1,错误号为EPIPE(Broken pipe)。

PS:在recv(sock, ...) 得到返回值为0的时候表示连接断开,这时候应该调用close(sock)来保证后续不会出现问题。

相关链接:

http://www.cppblog.com/elva/archive/2008/09/10/61544.html

http://stackoverflow.com/questions/108183/how-to-prevent-sigpipes-or-handle-them-properly


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter