我正在用 C (linux) 编写一个多线程服务器应用程序,它必须侦听 2 个不同的端口号,例如侦听端口号 3000 和 4000,以便连接到它的不同客户端提供不同的功能(实际功能由工作人员执行)线程,主线程无限期运行并在新连接上产生新工作线程)。我不确定 select 是否可以在这里工作,因为我们可以有多个套接字连接,但所有连接都与相同的端口号相关联。我尝试按顺序绑定到 sock_1 和 sock_2。当我运行 client_1 时,一切都按预期进行。但是,当我运行 client_2 时,我在客户端的 connect() 上收到错误。如果可以在这里使用 select(),请告诉我该怎么做。非常感谢任何帮助!谢谢 !
(P.S sock_1 指端口号 3000,sock_2 指端口号 4000,client_1 指从端口 3000 寻求服务的客户端,client_2 指从端口号 4000 向同一服务器寻求服务的客户端)
您完全误解了套接字和端口,这两个是不同的东西。
一个端口可以有多个套接字。但您可以将列表套接字(被动套接字)绑定到仅一个端口。
在继续之前读这个 https://stackoverflow.com/questions/152457/what-is-the-difference-between-a-port-and-a-socket
如果您希望应用程序侦听两个不同的端口,请为其绑定两个不同的套接字。
作为快速参考,单个进程中的 select 最多只能有 1024 个套接字描述符。
因此,如果您使用单进程模型,则 select 只能处理 1024 个连接。
另请阅读 C10k 问题,看看什么适合您的需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)