c - 非阻塞套接字被 fgets 阻塞

标签 c linux sockets fcntl

我正在测试一些东西,我做了一个非阻塞套接字,但“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/

相关文章:

java 输入流卡住

c - 通过内核模块发送数据包

linux - Bash 脚本 - 自动填写答案

json - 使用 bash 脚本在超过硬盘大小时自动清除 Elasticsearch 索引

linux - 如何查找包含特定文件的包?

java - 通过套接字传输数据的问题

node.js - node.js 中的 TCP 聊天服务器架构......在数据库或内存中保存套接字?

c - 如何从文件中读取并处理c中一个char中的utf-8字符

c - OpenCL 一维数组大数乘法

c - main() 的非标准签名编译成功