Mar*_*ian 5 c sockets port udp connect
我正在制作一个C程序,我需要检查目标计算机上打开的UDP端口.因为UDP是无连接的,所以connect()我无法用TCP 检查返回值.
send()和sendto()返回值也没有帮助.手册页说明:
No indication of failure to deliver is implicit in a send(). Locally
detected errors are indicated by a return value of -1.
Run Code Online (Sandbox Code Playgroud)
如何判断是否将UDP数据包发送到目标主机上的开放端口?
一般来说,你不能这样做.
原则上,具有关闭端口的主机应该发送回ICMP端口不可达.但他们经常不这样做; 同样,失败或无法访问的主机不会发送此类消息.此外,一些防火墙将阻止该消息.
检索错误也存在问题.Linux有很好的定义但令人困惑的语义,用于检索套接字上的错误(有关某些信息,请参阅各种手册页,socket(7),ip(7)和udp(7)).例如,当您执行不相关的sendto()时,有时会看到报告的先前错误.其他操作系统具有稍微不同的机制来检索特定的套接字错误.
如果保证它是另一个端口上的特定协议,你可以发送一个应该引出特定响应的数据包(如果它是你自己的协议,你可以添加一个"你在那里"的消息类型),那么你可以使用那.但一般来说,是否生成响应取决于应用程序,并且您无法区分没有任何侦听的端口,以及具有某些决定不响应您的侦听的端口.