c - Linux 套接字 : Close socket in C

标签 c linux macos

我使用 Ctrl-C 终止服务器,我认为这会立即关闭套接字。但是事实证明,如果我绑定(bind)同一个端口,它会说绑定(bind)失败。我使用 mac OS X。有什么想法吗?我什至为 ctrl C 实现了信号处理程序来关闭它,但仍然有同样的问题。

最佳答案

你可以在绑定(bind)它之前用它来消除错误(至少在 Linux 上,我不知道 OSX)

 int on = 1;
 setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, on.sizeof); // or sizeof(on) in C

当套接字关闭时,内核会保留一个句柄,以防线路上仍有一些未决数据以乱序或延迟等方式到达,因此它可以在数据到达时通过告诉另一端它来理智地处理它现在关闭,而不是将那些随机 block 传送到下一个应用程序。如果您想了解更多信息,这称为“time_wait”状态。在发布所有内容之前需要几分钟,以确保一切都清楚。

这个 reuse addr 选项告诉它不用担心这个,只要重新绑定(bind)就不用等待了。

关于c - Linux 套接字 : Close socket in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22138576/

相关文章:

c - C语言中星号指针的用法

c++ - 使用 -O3 在 GCC 中编译共享库不会导出与 -O0 一样多的符号

macos - git 对 Rstudio (OSX) 不可见的原因

bash - 如何在 OS X 上使用 curl 将文件下载到新创建的目录?

c - 为什么 C 中函数的原型(prototype)和定义可能不同?

不太明白指针

c - pthread_create(...) 执行函数 - 指针混淆

linux - 在 Linux 上设置定时器和信号计数。信号计数与运行时间成正比吗?

linux - 自动更改bash脚本中的变量

c - get_pixel 函数引发总线错误 : 10