我正在多次运行这段代码(对于 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:资源暂时不可用
问题是什么?
答案 0 :(得分:1)
只需修改代码即可执行您想要的操作。当您收到错误,而不是无条件地调用perror
时,请检查它是否超时。如果它不是超时,则调用perror
并返回。如果超时,请在超时时执行您想要执行的操作。