所以setsockopt在AF_UNIX(AF_LOCAL)套接字上超时...没有文档/不工作...选项/备选方案?

时间:2010-07-16 13:12:18

标签: c linux sockets unix-socket

如果重要的话,我正在运行Fedora 13。

我在unix(7),setsockopt和send / recv。

上查找了手册页

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  

我该怎么做才能解决setsockopt不可靠的问题   在AF_UNIX套接字上使用超时的方法吗?

好吧,不要使用它们。

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

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

  1. 计时器(如果你不关心像傻瓜那样打断你的代码)
  2. 轮询(一个带有循环的专用线程来检查fds,需要时间)
  3. 超时(比如带有超时值的epoll_wait(),减慢所有时间)
  4. 有些人使用管道唤醒你想要操作的fds。 我的测试表明,这是一种巨大的资源浪费。 无论你做什么,这将是低效或棘手的。 有时,两者(感谢愚蠢的内核开发人员)。

    祝你好运。