Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否有方法向打开fd的所有线程发送信号?_C_Networking - Fatal编程技术网

C 是否有方法向打开fd的所有线程发送信号?

C 是否有方法向打开fd的所有线程发送信号?,c,networking,C,Networking,我想关闭一个套接字,但在通知所有线程阻塞accept/connect之前,我会发送一个特定于用户的信号,但不知道信号接收线程的tid。我无法使用syscallkill(pid,signal)为什么不在没有通知的情况下关闭套接字?在接受或从该套接字读取时被阻止的每个线程都将返回相应的错误,您可以解析该错误以采取必要的操作是。您可以通过系统调用kill()向所有正在运行的线程发送信号。 像这样使用它: 终止(0,信号\u id) 这里“0”表示发送给所有进程的广播信号。注册到广播信号的进程,执行其信

我想关闭一个套接字,但在通知所有线程阻塞
accept/connect
之前,我会发送一个特定于用户的信号,但不知道信号接收线程的tid。我无法使用syscall
kill(pid,signal)

为什么不在没有通知的情况下关闭套接字?在接受或从该套接字读取时被阻止的每个线程都将返回相应的错误,您可以解析该错误以采取必要的操作

是。您可以通过系统调用kill()向所有正在运行的线程发送信号。 像这样使用它: 终止(0,信号\u id)
这里“0”表示发送给所有进程的广播信号。注册到广播信号的进程,执行其信号处理程序以进行进一步操作

使用
shutdown()
如中所述,如果他们试图写入已关闭的套接字,您可以向他们发送一个SIGPIPE,或者安排任何读取返回套接字已关闭的指示器。但是UDP套接字如何,我无法使用SIGPIPEErr。。。pid?线“pid”是进程id,而不是线程id。您不能“在数据包中发送信号”-但您可以很好地定义一个数据包类型,告诉接收方“我们很快就要关闭”。然而,这并不是通常的做法——接收者需要能够接受这样一个事实:socket被关闭(由于服务器崩溃、网络问题等等)。所以你可以简单地关闭套接字,接收器将能够检测到。我相信关闭TCP是为了纠正我,如果我错了嗯,你是对的,我不知道你在使用UDP。然后你将不得不使用任何IPC技术。。。命名套接字、共享内存等
kill()
向进程发送信号。如果该进程是多线程的,则该进程的一个线程将接收信号(如果未被阻止)。因此,
kill()
不是将信号寻址到特定线程的选项。