使用send和recv时,我无法捕获SIGPIPE。 但是,将send / recv与select一起使用时,我无法捕获SIGPIPE。 我的代码有什么问题?
// the select will block 10 seconds
ret = select(sockfd + 1, NULL, &write_fd, NULL, &tv);
if (FD_ISSET(sockfd, &write_fd))
{
Printf("Server start to send...\n");
signal(SIGPIPE, handle_sig); // It seems doesn't work here
ret = send(sockfd, buff, BUFF_SIZE , 0);
/*
The handle_sig won't be execute, and the process just finished.
*/
}
这是服务器代码。当客户端关闭连接时,Select将立即返回,但handle_sig将不会执行。