C++ Linux下Socket的开发

C++ Linux下Socket的开发,c++,linux,sockets,linux-kernel,C++,Linux,Sockets,Linux Kernel,以下是我的环境: Linux,Ubuntu C++/gdb 蚀 我正在实现一个TCP套接字服务器应用程序。 在开发/调试时,应用程序可能会在连接被接受之后,以及在打开的套接字正常关闭之前终止。 在这种情况下,应用程序的下一次执行将无法绑定到侦听端口,只有在等待一分钟左右后,绑定才会再次成功 我的假设是Linux内核有一些清理机制来收集所有未正常关闭的套接字,这解释了为什么我必须等待~1分钟才能再次绑定端口 话虽如此,有没有办法避免这1分钟的等待?有没有办法强制操作系统收集所有未正常关闭的套接字

以下是我的环境:

  • Linux,Ubuntu
  • C++/gdb
  • 我正在实现一个TCP套接字服务器应用程序。
    在开发/调试时,应用程序可能会在连接被接受之后,以及在打开的套接字正常关闭之前终止。 在这种情况下,应用程序的下一次执行将无法绑定到侦听端口,只有在等待一分钟左右后,绑定才会再次成功

    我的假设是Linux内核有一些清理机制来收集所有未正常关闭的套接字,这解释了为什么我必须等待~1分钟才能再次绑定端口

    话虽如此,有没有办法避免这1分钟的等待?有没有办法强制操作系统收集所有未正常关闭的套接字

    任何帮助都将不胜感激


    Sophin的Nadav

    当然有,只需在插座上设置
    以便重新使用EADDR
    SOL_插座
    级别选项

    int yes = 1;
    if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes))
        perror("setsockopt");
    

    当然有,只需在套接字上设置
    以便重新使用eaddr
    SOL\u SOCKET
    level选项即可

    int yes = 1;
    if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes))
        perror("setsockopt");
    

    指定等待的不是Linux,而是TCP RFC(查找“2*MSL”)。指定等待的不是Linux,而是TCP RFC(查找“2*MSL”)。