【问题标题】:Socket development under LinuxLinux下的socket开发
【发布时间】:2012-03-17 11:38:49
【问题描述】:

以下是我的环境:

  1. Linux、Ubuntu
  2. C++/gdb
  3. 日食

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

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

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

任何帮助将不胜感激。

索芬的纳达夫

【问题讨论】:

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

标签: c++ linux sockets linux-kernel


【解决方案1】:

当然有,只需在套接字上设置SO_REUSEADDRSOL_SOCKET 级别选项即可。

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

【讨论】:

    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2012-06-28
    • 2012-09-10
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多