我有一些recv()
定期调用的代码(带有MSG_DONTWAIT
标志)。我很好奇,因为在 vtune 中分析我的代码时,我看到一个sigprocmask()
与 关联的调用recv()
,并且它占用了总时间的很大一部分来执行。我很好奇为什么recv()
打电话sigprocmask()
。
问问题
269 次
2 回答
1
在 linux 下使用 TCP 套接字时,如果对方意外关闭,您将收到 SIGPIPE。
既然你可以屏蔽这个信号(大多数时候,你会自己处理返回值 0,你不关心这个信号),我猜系统库会检查信号状态,如果被屏蔽,使用更快的代码路径。
如果不是,则无法优化。
顺便说一句,你知道 pselect() 对吗?
于 2012-10-29T11:51:28.027 回答
0
可能这样 recv 可以判断是否生成了相关信号,否则如果所述信号被阻塞,则不会看到这些信号。想到 EAGAIN/EWOULDBLOCK 作为 errno 的值,有时使用可能被阻塞的信号生成。你看过sigprocmask
手册页吗?
于 2012-05-11T15:48:58.120 回答