Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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 多端口侦听套接字linux_C_Linux_Sockets_Port - Fatal编程技术网

C 多端口侦听套接字linux

C 多端口侦听套接字linux,c,linux,sockets,port,C,Linux,Sockets,Port,我正在用C(linux)编写一个多线程服务器应用程序,它必须侦听两个不同的端口号,比如侦听端口号3000和4000,以便不同的客户端连接到它以提供不同的功能(实际功能由工作线程执行,主线程无限期运行,并在新连接时产生新的工作线程)。我不确定select是否在这里工作,因为我们可以有多个套接字连接,但都与相同的端口号关联。我尝试顺序绑定到sock_1和sock_2。当我运行client_1时,一切都按预期工作。但是,当我运行client_2时,客户端的connect()出现了一个错误。如果这里可以

我正在用C(linux)编写一个多线程服务器应用程序,它必须侦听两个不同的端口号,比如侦听端口号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寻求同一服务器服务的客户端)

使用select()如果您的应用程序一次必须从多个套接字接收数据,这是非常好的,因为它将阻塞,直到多个套接字中的任何一个准备好数据。select()的另一个优点是,您可以设置一个超时值,在该值之后,无论任何套接字是否有数据可供您使用,都会将控制权返回给您。
以下链接对您很有用:

问题20

第6章:我对您的应用程序“not required select()”的理解请查看以下链接中的代码:


您在代码中为不同的端口调用了两个不同的bind()?正如@Rahul Gautam在他的文章中指出的那样。

您完全误解了套接字和端口,这两个是不同的东西。 一个端口可以有多个套接字。但是您可以将清单套接字(被动套接字)绑定到单个端口。 在继续之前

如果希望应用程序在两个不同的端口上侦听,请使用它绑定两个不同的套接字

对于快速参考,单选进程最多只能有1024个套接字描述符。 因此,如果您使用的是单个进程模型,那么select只能处理1024个连接。
同时阅读C10k问题,看看什么适合您的需要。

这正是
select
的设计目的。(和
poll
epoll
kqueue
等)您是否尝试阅读
选择
手册页?