我正在尝试在UDP之上创建可靠的服务。
这里我需要超时receiveFrom
窗口c ++的功能,如果没有数据包到达
在指定的时间。
在java中我这样做DatagramSocket.setSoTimeout
但我不知道如何在windows c ++中实现这一点。
感谢
答案 0 :(得分:3)
专门查看setsockopt()
SO_RCVTIMEO
。
答案 1 :(得分:3)
尝试使用select。这将适用于TCP和UDP套接字。只是另一种方法来做同样的事情,如Len的答案,但不是为套接字上的所有recv操作设置超时,你可以设置逐个呼叫的超时长度。
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int
input_timeout (int filedes, unsigned int seconds)
{
fd_set set;
struct timeval timeout;
/* Initialize the file descriptor set. */
FD_ZERO (&set);
FD_SET (filedes, &set);
/* Initialize the timeout data structure. */
timeout.tv_sec = seconds;
timeout.tv_usec = 0;
/* select returns 0 if timeout, 1 if input available, -1 if error. */
return TEMP_FAILURE_RETRY (select (FD_SETSIZE,
&set, NULL, NULL,
&timeout));
}
int
main (void)
{
fprintf (stderr, "select returned %d.\n",
input_timeout (STDIN_FILENO, 5));
return 0;
}