Looyao's Blog

记录一些点滴

iOS 忽略SIGPIPE的问题

| Comments

写网络程序时候, 当向对方write数据的时候, 如果连接断开(如对方主动close了连接), 会产生SIGPIPE信号, 如果不对这个信号处理程序就会退出或者也可以说崩掉了, 所以一般简单处理就是忽略掉这个信号,

signal(SIGPIPE, SIG_IGN);

但是遇到一个诡异的问题, 用Xcode debug设备做并发测试的时候程序就会崩溃, 怎么都查不出来原因, 后来不用Xcode debug, 直接在设备运行App再进行压力测试就没问题了, 也就是说在Xcode debug的时候, 忽略SIGPIPE是不起作用的.

小记一下.

UPDATE:

最近测试发现, 即使忽略SIGPIPE信号, socket write操作时候依然会出现崩溃, 这里需要通过设置socket属性来解决.

1
2
int val = 1;
setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&val, sizeof(int));

Comments