select() 可以与阻塞套接字一起使用吗?
Posted
技术标签:
【中文标题】select() 可以与阻塞套接字一起使用吗?【英文标题】:Can select() be used with blocking sockets? 【发布时间】:2015-02-20 11:23:55 【问题描述】:我想使用select()
来监控套接字是否有要读取的数据,但我不想使用非阻塞套接字。那么select()
可以与阻塞套接字一起使用吗?
我正在使用 Windows。
【问题讨论】:
大声笑这个问题怎么“不清楚”?你们这些人很奇怪 【参考方案1】:是的,这是select
的全部内容。
它会监视套接字上的活动,如果您在不知道数据存在的情况下尝试从它们read
时会阻塞。最重要的是,它可以监视 多个 套接字上的活动,如果没有 select
在阻塞套接字上,您将无法做到这一点,除非您在单独的线程中处理每个套接字。同样重要的是,它会告诉您套接字何时准备好读取 和/或 进行写入;简单地调用 read
或 write
是不行的。
select
的行为在这些方面甚至是 documented:
select()
和pselect()
允许程序监视多个文件描述符,等待一个或多个文件描述符为某种 I/O 操作(例如,可能的输入)“准备好”。 如果可以在不阻塞的情况下执行相应的 I/O 操作(例如,read(2)
),则认为文件描述符已准备就绪。
当然,您也可以将它与非阻塞套接字一起使用,否则为了“等待”活动,您必须提供read
-sleep
-read
-@987654334 @-... 循环,由于某些原因,这不是最理想的。
【讨论】:
以上是关于select() 可以与阻塞套接字一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章