我正在测试一些东西,我做了一个非阻塞套接字,但“fgets”破坏了我的计划。如何防止 fgets 阻塞下面显示的 while 循环? 解决这个问题的代码将不胜感激。
fcntl(clientSocket, F_SETFL, O_NONBLOCK);
while(1){
fgets(buffer,sizeof(buffer),stdin);
send(clientSocket,buffer,sizeof(buffer),0);
recv(clientSocket,buffer,sizeof(buffer),0);
printf("%s",buffer);
}
最佳答案
不建议这样做,但如果您愿意,可以这样做:
if (fcntl(0, F_SETFL, O_NONBLOCK) == -1) {
perror("fcntl");
exit(EXIT_FAILURE);
}
并且您有一个非阻塞标准输入。
提示:最好使用 select 或 poll 来等待就绪的文件描述符。
关于c - 非阻塞套接字被 fgets 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44250349/