1

VxWorks sockLib 是否支持 SO_RCVTIMEO 选项,setsockopt 可以使用该选项来设置 recv 调用的超时,就像在 winsock 中一样?

以下是 Windows 中的调用示例:

int timeout = 30000; // 30 seconds
status = setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(int));

令人困惑的是,setsockopt 返回的状态并不表示来自未知选项的错误,并且 SO_RCVTIMEO 是在 sockets.h 中定义的。该调用仍然没有产生所需的操作,我找不到任何说明它受支持的文档。

如果不支持,对等效方法有什么建议吗?

我正在使用 VxWorks 5.4。我很想知道它是否适用于更高版本。

4

1 回答 1

-1

我不能直接回答这个问题,但我可以说,要解决这些类型的“阻塞接收”样式问题,请使用 select() 函数在等待传入套接字数据时指定超时。然后,您可以完全避免阻塞 recv() 调用,直到您知道套接字中有可用数据。

我为 VxWorks (#include "selectLib.h") 以及 Linux 和 Windows 套接字库推荐这个解决方案。SO_RCVTIMEO 很有用,但select () 更有用,适用于所有操作系统。

于 2012-04-09T15:02:17.767 回答