我想在UDP之上創建一個可靠的服務。 在這裏我需要超時receiveFrom
函數的窗口C++,如果沒有數據包在指定的時間到達 。 在java中我這樣做DatagramSocket.setSoTimeout
但我不知道如何在Windows C++中實現這一點。窗口C++:如何在基於udp的對話中超時receiveFrom函數
感謝
我想在UDP之上創建一個可靠的服務。 在這裏我需要超時receiveFrom
函數的窗口C++,如果沒有數據包在指定的時間到達 。 在java中我這樣做DatagramSocket.setSoTimeout
但我不知道如何在Windows C++中實現這一點。窗口C++:如何在基於udp的對話中超時receiveFrom函數
感謝
看看setsockopt()
專門SO_RCVTIMEO
。
嘗試使用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;
}