最近写了一篇关于Unix的“学习笔记”,对多线程进程提出了如下主张:
当收到带有“紧急”位的 TCP 数据包时,内核几乎不可能识别应该接收 SIGURG 的线程
在第3段中第 1.1 节,我想核实一下这一点。
该标准对此没有做出任何规定,并保留了整个 TCPURG
标志、MSG_OOB
以及SIGURG
特定于实现和协议的内容。
但现有的做法又如何呢?操作系统内核是否会向接收 TCP 标志的套接字上的调用SIGURG
中阻塞的线程发送消息?是否有能够将线程指定为套接字所有者的实现?还会有其他行为吗?recv(2)
URG
答案1
在我调查的 3 个实现上,Darwin、FreeBSD 和 Linux,主线程接收信号。如果主线程用掩码阻止它,则没有线程接收到信号。