linux - 为什么需要使用 select 在服务器中设置客户端套接字 fd 是非阻塞的?

标签 linux sockets select

大家好! 我在实践中对选择模型有疑问。书中的一些内容告诉我有关在选择模型中将接收到的套接字 fd 设置为非阻塞。我不知道原因。 就我而言,我可以通过 FD_ISSET(fd_all[i], fd_read_set) 知道客户端套接字 fd 是否可读。那么为什么我需要将客户端套接字 fd 设置为非阻塞呢? 有人告诉我为什么吗?谢谢!

最佳答案

有时,在 select() 确定套接字可读和应用程序实际尝试从中读取数据之间,套接字会发生变化。因此,最安全的做法是使其成为非阻塞,这样您在尝试读取时就不会被挂起。

发生这种情况的一种可能的方式是,如果您有多个进程或线程都在同一个套接字上调用 select()。当数据到达时,它们都会返回并尝试读取它,但只有第一个会成功。

关于linux - 为什么需要使用 select 在服务器中设置客户端套接字 fd 是非阻塞的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39074397/

相关文章:

java - 客户端/服务器应用程序中的 UDP

select - Laravel 和 Eloquent : Specifying columns in when retrieving related items

jquery选择索引问题

用于检索不相关记录的元组的 SQL

c++ - Ubuntu 10.04,将 MAP_HUGETLB 与 MAP_SHARED 一起使用时出错

linux - 通过一条汇编指令单步执行一个过程

java - JAVA套接字服务器应用程序框架

Android 蓝牙 socket.connect() 失败

java - Hadoop 2.6.0 HDFS 输出文件夹

php - 在 UNIX/linux 服务器中自动运行 shell 脚本