c++ - Linux下的socket开发

标签 c++ linux sockets linux-kernel

以下是我的环境:

  1. Linux, Ubuntu
  2. C++/gdb
  3. eclipse

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

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

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

我们将不胜感激。

索芬的纳达夫

最佳答案

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

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

关于c++ - Linux下的socket开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9749688/

相关文章:

linux - 无法在 LINUX 上安装 Fuchsia

c++ - 我应该使用多个 Vectors 还是 Enum 状态

linux - 使用 bash 从文件中获取随机字节数?

c++ - 将函数绑定(bind)到范围以生成迭代函数

python - 使用 popen 和专用的 TTY Python 运行交互式 Bash

java - System.setProperty 和 Security.setProperty 的区别

sockets - 使WebSocket连接到'ws :

c - 关闭 IPV6_V6ONLY 或两个监听套接字

c++ - For循环设置变量条件

c++ - 高效的 boost 分配使用