我正在使用无限循环来从TCP服务器接收数据
我需要同时执行具有更高优先级的其他任务
但是每次等待TCP数据时,控制都会保持recv()
函数。
while(1)
{
rdlen = read(fd1, buf, (sizeof(buf) - 1));
if (rdlen > 0)
{
buf[rdlen] = 0;
printf("%s",buf);
memset(buf, 0, strlen(buf));
}
if((numbytes=recv(sockfd, buf1, wGetLen, 0)) != -1)
{
printf("%s %d\n", buf1, numbytes);
memset(buf1, 0, strlen(buf1));
}
}
如何在不等待TCP接收数据的情况下执行上述操作?
答案 0 :(得分:2)
您需要将套接字设置为非阻塞套接字。这样做时,如果您调用printf("[");
并且没有任何内容可以接收,则函数调用将返回-1以指示错误,recv
为错误代码。
您可以按如下方式设置非阻塞标志
EAGAIN
然后,您可以按如下方式更改int fdflag;
if ((fdflag = fcntl(sockfd, F_GETFL)) == -1) {
perror("Error getting socket descriptor flags");
exit(1);
}
fdflag |= O_NONBLOCK;
if (fcntl(sockfd, F_SETFL, fdflag) == -1) {
perror("Error setting non-blocking option");
exit(1);
}
来电:
recv