Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Sockets 如何将内核中的套接字配置为无阻塞或accept()调用超时?_Sockets_Linux Kernel_Blocking_Nonblocking - Fatal编程技术网

Sockets 如何将内核中的套接字配置为无阻塞或accept()调用超时?

Sockets 如何将内核中的套接字配置为无阻塞或accept()调用超时?,sockets,linux-kernel,blocking,nonblocking,Sockets,Linux Kernel,Blocking,Nonblocking,在Linux内核模块中,我希望对侦听套接字的accept处理程序的调用不要在内核线程中等待。因此,我需要将O_NONBLOCK传递给accept处理程序。但是我想在连接的套接字上使用超时,而不是非阻塞套接字 我知道有两种机制可以将内核中的套接字配置为非阻塞。将O_NONBLOCK传递给sock->op(struct socket*sock)中的接受或连接处理程序。我不知道在那之后如何重置O_非块标志。否则,如何更改套接字上的O_非块标志 是否有其他方法,例如接受时超时?这将允许侦听端口上已连接的

在Linux内核模块中,我希望对侦听套接字的accept处理程序的调用不要在内核线程中等待。因此,我需要将
O_NONBLOCK
传递给accept处理程序。但是我想在连接的套接字上使用超时,而不是非阻塞套接字

我知道有两种机制可以将内核中的套接字配置为非阻塞。将O_NONBLOCK传递给
sock->op
struct socket*sock
)中的接受或连接处理程序。我不知道在那之后如何重置O_非块标志。否则,如何更改套接字上的O_非块标志

是否有其他方法,例如接受时超时?这将允许侦听端口上已连接的套接字阻塞。

不幸的是,术语“套接字”用于表示几种不同的内容。用户空间中的一个(通过一个小整数值的打开文件描述引用)有一个状态,您可以使用
fcntl
进行设置。内核空间中的一个(指向实际连接端点的指针)没有。将
O_NONBLOCK
传递给accept或connect处理程序只会使特定的accept或connect操作无阻塞。

只是一个可移植性说明:“Linux accept不会像O_NONBLOCK那样继承套接字标志。此行为不同于其他BSD套接字实现。”