Sockets 如何将内核中的套接字配置为无阻塞或accept()调用超时?
在Linux内核模块中,我希望对侦听套接字的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_非块标志 是否有其他方法,例如接受时超时?这将允许侦听端口上已连接的
O_NONBLOCK
传递给accept处理程序。但是我想在连接的套接字上使用超时,而不是非阻塞套接字
我知道有两种机制可以将内核中的套接字配置为非阻塞。将O_NONBLOCK传递给sock->op
(struct socket*sock
)中的接受或连接处理程序。我不知道在那之后如何重置O_非块标志。否则,如何更改套接字上的O_非块标志
是否有其他方法,例如接受时超时?这将允许侦听端口上已连接的套接字阻塞。不幸的是,术语“套接字”用于表示几种不同的内容。用户空间中的一个(通过一个小整数值的打开文件描述引用)有一个状态,您可以使用fcntl
进行设置。内核空间中的一个(指向实际连接端点的指针)没有。将O_NONBLOCK
传递给accept或connect处理程序只会使特定的accept或connect操作无阻塞。只是一个可移植性说明:“Linux accept不会像O_NONBLOCK那样继承套接字标志。此行为不同于其他BSD套接字实现。”