【问题标题】:More Poll() ?'s更多 Poll() ?
【发布时间】:2011-07-18 13:13:54
【问题描述】:

又回来了!

我一直在 Windows 上使用 select() 进行一些异步套接字编程,并且运行良好。然而,它最多只能扩展到 1024 个客户端。Poll() 是解决这个限制的方法,我知道它适用于 linux 和 unix。但是在windows系统下不行吗?

我读到了 WsaPoll(),它有完全相同的功能吗?我必须链接到哪些库才能使用它?

我可以在 Windows 中使用 FD_SETSIZE 安全地增加套接字数量吗?我的最终程序将在 linux 服务器上。但是我现在正在 Windows 系统上进行测试。我应该把我的测试机器换成一个 linux 机器吗? (可能会去)

否则,您会建议在 Windows 上使用什么?

(抱歉所有问题,我自己在做研究,我保证 =D)

【问题讨论】:

  • 不要使用 ASIO。可读代码更好。

标签: c++ windows linux sockets asynchronous


【解决方案1】:

是的,WSAPoll() 的行为类似于 poll()。您需要使用WSAGetLastError 找出问题所在。错误代码不匹配,根据 WindowsSDK 和您的系统版本,posix 代码可能会或可能不会在 winsock2 标头中定义。

要使用 WSAPoll,您必须包含 winsock2.h 并链接到 ws2_32.lib 并在 Windows Vista/Server 2008 及更高版本上运行该应用程序。

但是,在您的代码中包含 WSAPoll 并不总是会阻止它在 Windows XP 上编译,而是会在您启动应用程序时收到错误消息。

如果您不打算在 Windows 上运行您的应用程序,那么我建议您跳过 SDK、构建、dll 和 Windows 版本的痛苦,并设置一个 Linux 虚拟机进行开发。

【讨论】:

  • 好吧,我就是这么想的,谢谢你的确认。我将只安装一个 linux 发行版,我需要一段时间。
【解决方案2】:

在 Windows 上,WSAAsyncSelect 应该允许您在单个线程中处理来自数千个套接字的事件。

【讨论】:

  • 谢谢!我不确定它的可扩展性如何!
【解决方案3】:

libevent 将使用最佳可用机制在 Windows、Linux、Solaris、OS X 和所有 BSD 衍生产品上进行事件驱动编程。

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2016-08-26
    • 1970-01-01
    相关资源
    最近更新 更多