对于 SIGURG 和 SIGIO,每个套接字都具有一个进程号和进程组 ID。这些值初始化为零,但是可以在稍后使用 F_SETOWN fcntl(2) 命令重新定义,如前面示例中所示。fcntl(2) 采用正值的第三个参数可以设置套接字的进程 ID。fcntl(2) 采用负值的第三个参数可以设置套接字的进程组 ID。SIGURG 和 SIGIO 信号的唯一允许接受者是调用进程。 类似的 fcntl(2)(即 F_GETOWN)将返回套接字的进程号。
还可以通过使用 ioctl(2) 将套接字指定给用户的进程组来接收 SIGURG 和 SIGIO。
/* oobdata is the out-of-band data handling routine */ sigset(SIGURG, oobdata); int pid = -getpid(); if (ioctl(client, SIOCSPGRP, (char *) &pid) < 0) { perror("ioctl: SIOCSPGRP"); }