我正在使用http://tangentsoft.net/wskfaq/examples/basics/select-server.html上的这个示例实现
这正在做我需要的大部分工作,处理连接而不会阻塞,并且所有工作都在其线程中(不像某些示例那样为每个连接创建新线程),但我担心因为我被告知winsock只会支持最多64个客户端连接:S
这64个连接是真的吗?
我还有其他选择吗?为类似的实现提供一个c ++示例会很酷.
谢谢
替代图书馆:
你应该考虑使用boost asio.它是一个跨平台的网络库,简化了您可能需要完成的许多任务.
您可以在此处找到您寻找的示例源代码.
关于64限制:
通过良好的设计,您将体验到64硬连接限制.基本上,如果您使用某种线程模型,您将不会遇到此限制.
以下是您听到的限制的一些信息:
4.9 - "64插座"限制是什么?
有两个64插槽限制:
Win32事件机制(例如WaitForMultipleObjects())一次只能等待64个事件对象.Winsock 2提供了WSAEventSelect()函数,它允许您使用Win32的事件机制来等待套接字上的事件.因为它使用Win32的事件机制,所以您一次只能等待64个套接字上的事件.如果要一次等待超过64个Winsock事件对象,则需要使用多个线程,每个线程等待不超过64个套接字.
select()函数在某些情况下也限制为一次等待64个套接字.winsock.h中定义的FD_SETSIZE常量确定传递给select()的fd_set结构的大小.它默认定义为64.您可以在#include winsock.h之前将此常量定义为更高的值,这将覆盖默认值.不幸的是,至少有一个非Microsoft Winsock堆栈和一些分层服务提供商假设默认值为64; 在较大的fd_sets中,它们将忽略超过64位的套接字.
您可以编写一个测试程序,在您计划支持的系统上尝试此操作,以查看它们是否不受限制.如果是,您可以使用线程来解决这个问题,就像使用事件对象一样.
资源