VxWorks sockLib是否支持setockopt可以用来设置recv调用超时的SO_RCVTIMEO选项,例如在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。我想知道它是否可以在更高版本中使用。
我无法直接回答此问题,但是我可以说,要解决这些类型的“阻塞接收”样式问题,请在等待传入套接字数据时使用select()函数指定超时。然后,您可以完全避免阻塞recv()调用,直到您知道套接字中有可用数据为止。
我向VxWorks(#include“ selectLib.h”)以及Linux和Windows套接字库推荐此解决方案。 SO_RCVTIMEO很有用,但是select()在所有操作系统上都更有用。