select()可以与阻塞套接字一起使用吗?

时间:2015-02-20 11:23:55

标签: c++ windows sockets network-programming

我想使用select()监视套接字是否有要读取的数据,但我不想使用非阻塞套接字。那么select()可以与阻塞套接字一起使用吗?

我正在使用Windows。

1 个答案:

答案 0 :(得分:2)

是的,这是select整个点

它会监视套接字上的活动,如果您在不知道数据存在的情况下尝试read,就会阻止这些活动。最重要的是,它可以监视多个套接字上的活动,除非您在单独的线程中处理每个套接字,否则在阻塞套接字上没有select就无法做到这一点。同样重要的是,它会告诉您套接字何时准备好读取和/或进行写入;只需调用readwrite就无法执行此操作。

select的行为在这些术语中均为documented

  

select()pselect()允许程序监视多个文件描述符,等待一个或多个文件描述符为某类I / O操作“准备好”(例如,输入可能) 。 如果可以在不阻塞的情况下执行相应的I / O操作(例如read(2)),则认为文件描述符已就绪。

当然,您也可以将其与非阻塞套接字一起使用,否则为了“等待”您必须提出read - sleep - {{ 1}} - read - ...循环,由于一些原因,这是次优的。