2011-06-27 63 views
1

VxWorks sockLib是否支持SO_RCVTIMEO选项,它可以被setsockopt用来设置recv调用的超时时间,就像在winsock中一样?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。我很想知道它是否可以在更高版本中使用。

+0

我不确定,但这里有一点需要考虑。虽然Windows使用DWORD设置SO_RCVTIMEO,但大多数UNIX都使用struct timeval。也许这是问题?如果你尝试了会发生什么:struct timeval tv; tv.tv_sec = 30; setsockopt(sockid,SOL_SOCKET,SO_RCVTIMEO,(char *)&tv,sizeof(struct timeval)); – ribram

+0

感谢您的回复。是的,我以前尝试过,没有任何改进。 – kingbob939

回答

0

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

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

相关问题