0

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

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

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

4

1 回答 1

0

不幸的是,术语“套接字”用于指代几种不同的事物。用户空间中的那个(通过打开的文件描述引用一个小整数值)有一个状态,你可以用fcntl. 内核空间中的那个(指向实际连接端点的指针)没有。传递O_NONBLOCK给接受或连接处理程序只会使特定的接受或连接操作成为非阻塞的。

于 2012-07-11T15:05:41.683 回答