Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 套接字可用于读取的数据_C++_Windows_Sockets - Fatal编程技术网

C++ 套接字可用于读取的数据

C++ 套接字可用于读取的数据,c++,windows,sockets,C++,Windows,Sockets,我需要一种快速的方法来检查套接字是否有可读取的数据。 我使用select(),但速度不快。 存在更快的方法吗?select()由于需要重建fd_集以及它给出结果的方式,对于大型套接字集,它往往会降级 Linux上的epoll()API可能是我最喜欢的处理多个套接字的方法。您可以快速查看它,但它在Windows上不可用 我认为,解决select()在有这么多套接字的Windows上的限制的唯一方法是使用IO完成端口。您需要在Windows上使用完成端口。网上有很多关于如何使用它们的文章。有什么不是

我需要一种快速的方法来检查套接字是否有可读取的数据。 我使用select(),但速度不快。 存在更快的方法吗?

select()由于需要重建fd_集以及它给出结果的方式,对于大型套接字集,它往往会降级

Linux上的epoll()API可能是我最喜欢的处理多个套接字的方法。您可以快速查看它,但它在Windows上不可用


我认为,解决select()在有这么多套接字的Windows上的限制的唯一方法是使用IO完成端口。

您需要在Windows上使用完成端口。网上有很多关于如何使用它们的文章。

有什么不是“快”呢?调用select()所需的时间,即每秒可以执行的select数。或者问题更多的是您正在处理的数据总量。定义“快速”的含义/期望我需要在1/10秒内检查约1000个插座,可能更快。我用1000个套接字测试了select()。每个套接字每10秒发送4个字节。1秒钟内处理了1000个套接字。是否重建fd_集?您的意思是select()本身会生成另一个具有可读取套接字的fd_集?select()将修改传递给它的任何fd_集。因此,在下一次调用时,必须重新创建一个fd_集以传递给select()——要么通过套接字,要么通过复制另一个fd_集,两者都是O(n)操作。但是,像epoll()这样的API不需要传递一组FD—它们会记住它们,并且您会将FD集中的更改通知API。