0

我多次运行这段代码(对于UDP 套接字recvfrom上的非阻塞):

struct timeval read_timeout;
read_timeout.tv_sec = 0;
read_timeout.tv_usec = 1000;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &read_timeout, sizeof read_timeout);
ssize_t n = recvfrom(sockfd, recvline, sizeof(recvline), 0, NULL, NULL);
if (n < 0) {
    perror("recvfrom");
    return -1;
} else // ... normal usage

有时程序停止,我收到以下错误perror

recvfrom:资源暂时不可用

可能是什么问题?

4

1 回答 1

1

只需修改代码以执行您想要的操作。当您收到错误时,不要perror无条件调用,而是检查它是否超时。如果不是超时,则调用perror并返回。如果是超时,请在超时时做任何你想做的事情。

于 2018-01-17T19:25:54.373 回答