【问题标题】:bind() failed: Address already in usebind() 失败:地址已在使用中
【发布时间】:2017-04-21 04:52:42
【问题描述】:

我正在实现 DNS 服务器和 DNS 解析器,并且我正在使用套接字编程。但是我在函数bind() 中遇到错误,因为bind() 失败并且sendto() 权限被拒绝。

我曾尝试使用不同的端口号,我也是以 root 身份工作,但它仍然给我同样的错误。请帮助我解决这些问题。欢迎您的回答。谢谢。

https://github.com/srijan/DNS-Server---Resolver/tree/c73a124a15f53eb985a4b4afc0dffedd432c8454

【问题讨论】:

标签: c sockets dns


【解决方案1】:

在 Windows 中使用 CLI 运行 Netstat -anob。

C:\Windows\System32>socat TCP-LISTEN:443,fork,reuseaddr TCP:localhost:22
2021/02/01 16:22:41 socat[11240] E bind(5, {AF=2 0.0.0.0:443}, 16): Address already in use

C:\WINDOWS\system32>netstat -anob

Connexions actives

  Proto  Adresse locale         Adresse distante       État
  TCP    0.0.0.0:22             0.0.0.0:0              LISTENING       5676
 [sshd.exe]
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1244
  RpcSs
 [svchost.exe]
  TCP    0.0.0.0:443            0.0.0.0:0              LISTENING       7396
 [vmware-hostd.exe]
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4

[vmware-hostd.exe] 是监听进程,而不是[socat.exe]。

就我而言,我使用的是 VMware Workstation 16 Pro,并在首选项中禁用了虚拟机共享,这是一个已弃用的选项。现在一切正常。

WMware Workstation Server deprecated

【讨论】:

  • 请举例说明要在输出中查找的内容。
【解决方案2】:

此错误通常表示系统中的其他套接字在同一端口上打开。

要查看其他打开的 UDP 套接字,请从命令行运行 netstat -anu。您将获得 IP/端口配对列表。如果您看到一个用于端口 53 的套接字,则该套接字与您的套接字冲突。如果您能够以 root 身份运行并且还使用-p 选项,它还会告诉您拥有每个套接字的进程号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2018-04-01
    • 2019-07-29
    相关资源
    最近更新 更多