我正在实施DNS服务器和DNS解析器,我正在使用套接字编程。但由于bind()
失败且bind()
权限被拒绝,我在函数sendto()
中收到错误。
我曾尝试使用不同的端口号,我也是以root身份工作,但它仍然给我同样的错误。请帮我解决这些问题。欢迎你的回答。谢谢。
https://github.com/srijan/DNS-Server---Resolver/tree/c73a124a15f53eb985a4b4afc0dffedd432c8454
答案 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 并在首选项中禁用了虚拟机共享,这是一个已弃用的选项。现在一切正常。