我正在编写一个多线程服务器应用程序,在C(linux)中,它必须侦听2个不同的端口号,比如侦听端口号3000和4000,用于连接到它的不同客户端以提供不同的功能(实际功能由工作人员执行)线程,主线程无限期运行,并在新连接时产生新工作者).我不确定select是否可以在这里工作,因为我们可以有多个套接字连接,但都与相同的端口号相关联.我尝试顺序绑定到sock_1和sock_2.当我运行client_1时,一切都按预期工作.但是,当我运行client_2时,我在客户端的connect()上收到错误.如果可以在这里使用select(),请告诉我如何操作.任何帮助非常感谢!谢谢 !
(P.Sock_1指的是端口号3000,sock_2指的是端口号4000,client_1指的是从端口3000寻求服务的客户端,而client_2指的是从4000端口向同一服务器寻求服务的客户端)
解决方法:
你完全误解了socket和port,这两个是不同的东西.
端口可以有多个套接字.但您可以将列表套接字(被动套接字)绑定到仅一个端口.
在继续read this之前
如果您希望应用程序在两个不同的端口上侦听,请使用它绑定两个不同的套接字.
对于快速参考,单个进程中的select只能有1024个套接字描述符.
因此,如果您使用的是单个流程模型,那么select只能处理1024个连接.
另请阅读C10k问题,看看哪些适合您的需求.
标签:c-3,linux,sockets,port
来源: https://codeday.me/bug/20190723/1511619.html