gpt4 book ai didi

c - 如何检测端口是否已在 Linux 上的 C 中使用?

转载 作者:IT王子 更新时间:2023-10-29 00:51:09 27 4
gpt4 key购买 nike

我正在编写一个简单的网络服务器。我想让用户设置服务器监听的端口,但是我怎么知道用户输入的端口是否已经被使用?(如果我知道它已经被使用,我可以告诉他们输入另一个。)

最佳答案

只需尝试绑定(bind) 到端口,如果失败则检查errno 中的EADDRINUSE。这是唯一的方法,因为要正确,任何此类检查都必须是原子的。如果您进行了单独的检查,然后在发现该端口未被使用后尝试绑定(bind)到该端口,则另一个进程可能会在此期间绑定(bind)到该端口,再次导致它失败。同样,如果您进行了单独检查并发现该端口已被使用,则正在使用它的进程可能会在此期间关闭该端口、退出或崩溃,再次导致结果不正确。

所有这一切的要点(我写了一个长答案而不是一个简短答案的原因)是检查“我可以做某事吗?”的正确、可靠的方法。几乎总是尝试去做并检查是否失败。任何其他方法都可能导致竞争条件,并且在许多情况下竞争条件(尽管可能不是您的)竞争条件是安全漏洞。

关于c - 如何检测端口是否已在 Linux 上的 C 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4238189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com