bind()失败:地址已在使用中

时间:2016-12-06 14:05:53

标签: c sockets dns

我正在实施DNS服务器和DNS解析器,我正在使用套接字编程。但由于bind()失败且bind()权限被拒绝,我在函数sendto()中收到错误。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在 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