我正在用C (linux)编写一个多线程服务器应用程序,它必须侦听2个不同的端口号,例如侦听端口号3000和4000,以便不同的客户端连接到它来服务不同的功能(实际功能由工作线程执行,主线程无限运行,并在新连接时产生新的工作线程)。我不确定select在这里是否可以工作,因为我们可以有多个套接字连接,但所有连接都与相同的端口号相关联。我尝试了顺序绑定到sock_1和sock_2,当我运行client_1时,一切都正常工作。但是,当我运行client_2时,我在客户端的connect()上得到一个错误。如果select()可以在这里使用,请告诉我怎么做。任何帮助都非常感谢!谢谢!
(P.S so
在所有的stackoverflow世界中,最常被问及的主题可能是:"Address in in use“错误。关于这个话题有成千上万的问题。这个问题需要一个具体的细节。 具体细节:进程异常终止后,bind/accept-ed持有的地址有多长时间? 我正在编写一个HTTP服务器插件。显然,它接受套接字连接。如果进程异常终止(调试器或实际崩溃),调用accept的套接字地址将保留一段时间,然后才能重用(在Debian Linux上)。立即重新启动服务器,并尝试通过bind连接到相同的终结点,会导致“地址已在使用”错误。在进程终止后,该地址似乎被OS保留了一段时间,大约为60秒。这可能取决
当我多次运行我的程序时,我一直得到一个SocketException: Address already in use。
最起码的例子:
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace test
{
class Program
{
static TcpListener listener;
static void Main(string[] args)
{
listener