c - 如何在套接字服务器应用程序中重用端口?

标签 c sockets server port

<分区>

我正在尝试编写一个基本的服务器套接字程序。我使用以下代码绑定(bind)服务器套接字。

/* Bind the server socket */
if (bind(serversock, (struct sockaddr *) &server, sizeof(server)) < 0)
{
    perror("Failed to bind the server socket");
    exit(1);
}

当我第一次运行这个程序时,它工作正常,但是当我第二次运行它时,我得到了这个错误:

error

我想当我第二次运行该程序时,它给出了这个错误,因为该端口已经链接到我第一次运行的程序。有人可以告诉我如何关闭当前正在使用的端口吗?或者向我建议可以解决此错误的其他方法。

最佳答案

杀死绑定(bind)端口的进程:

 fuser -TERM 80/tcp #kills processes on tcp port 80 using signal SIGTERM

重新开始。

TCP 套接字通常在一段时间(几分钟)内不可重用,除非它们在绑定(bind)之前设置了 SO_REUSEADDR 选项(使用 setsockopt)。

(此选项稍微降低了稳健性,但在测试环境中使用应该相当安全。)

关于c - 如何在套接字服务器应用程序中重用端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40891207/

相关文章:

c - 并内并和 splinter 矩阵加法

c++ - 从 C/C++ 中的 ** 矩阵中提取行/列

ios - 迭代包含 "Extended ASCII"个字符的 const unsigned char *

c++ - C union 和 C++ union 有什么区别?

Python 套接字无法正确关闭连接

perl - 为什么我的 Perl sysread 在从套接字读取时会阻塞?

c++ - 在不关闭套接字的情况下使用 Boost::ASIO 连续传输数据

C Server运行但无输出

java - 没有客户端监听java端口的服务器

ssl - 通常如何实现需要 TLS 的临时服务器?