2015-07-28
如何避免收到SIGPIPE时程序退出

当向一个被对方关闭的fd写入时,程序会收到SIGPIPE. *nix的默认策略是退出, 如果你的程序不是shell utility的话, 这可能不是你想要的结果.

有三种方法刻意避免:

#include <signal.h>
int sigign() {
	struct sigaction sa;
	sa.sa_handler = SIG_IGN;
	sigaction(SIGPIPE, &sa, 0);
	return 0;
}

上面的方法都阻止SIGPIPE, 而是让写函数返回-1, 并将errno设为EPIPE.


lazyrobot.me