3

如果这很重要,我正在运行 Fedora 13。

我查阅了有关 unix(7)、setsockopt 和 send/recv 的手册页。

阅读手册页似乎或多或少地告诉我,并非所有选项都可以保证做任何事情......而且显然只有少数有效/无效的选项被记录在案。

特别是......我想看看是否可以超时。至少在我的系统上, SO_RCVTIMEO 实际上为 recv 系列调用设置了一个超时......但是 SO_SNDTIMEO 将套接字似乎设置为非阻塞模式而没有超时。

所以我的问题是......我可以做些什么来解决 setsockopt 不是处理 AF_UNIX 套接字超时的可靠方法这一事实?

4

2 回答 2

1

嗯,超时或select(2)超时怎么样?poll(2)epoll(4)

于 2010-07-16T13:25:45.423 回答
-1

我可以做些什么来解决 setsockopt 不是处理 AF_UNIX 套接字超时的可靠方法这一事实?

好吧,不要使用它们。

我在 G-WAN(一个 Web 应用程序服务器)中使用了 epoll(4) 并且不得不面对同样的问题。

基本上有三种处理超时的方法:

  1. 计时器(如果你不关心像傻瓜一样打断你的代码)
  2. 轮询(带有循环检查 fds 的专用线程,需要时间)
  3. 超时(例如具有超时值的 epoll_wait(),减慢所有速度)

有些人使用管道来唤醒您想要操作的 fd。我的测试表明,这是对资源的巨大浪费。无论你做什么,这要么效率低下,要么很棘手。有时,两者都有(感谢愚蠢的内核开发人员)。

祝你好运。

于 2010-07-16T13:53:39.677 回答