Linux(内核2.6.20)上是否有API函数可用于检查是否使用了绑定和/或连接的给定TCP / IP端口?
bind()
是唯一的解决方案(使用带SO_REUSEADDR
选项的套接字绑定到给定端口,然后关闭它吗?
答案 0 :(得分:2)
嗯,
根据strace -o trace.out netstat -at
netstat通过查看
来做到这一点/proc/net/tcp
和
/proc/net/tcp6
使用的端口在该文件中条目的第二个字段中以十六进制形式显示。
您可以通过查看第4个字段来获取连接状态,例如0A是LISTEN,01是ESTABLISHED。
答案 1 :(得分:1)
神圣的便携式BSD套接字API不允许您在尝试分配端口之前知道该端口是否正在使用。 不要试图超越API。我知道它有多诱人,我以前一直处于这种状况。但任何表面上聪明的方法(例如proc文件系统)都容易出现细微的错误,未来的兼容性问题,竞争条件等等。
答案 2 :(得分:0)
获取netstat
命令的来源,看看它是如何看到的。但是,你总会有一场比赛。此外,SO_REUSEADDR
不允许您使用其他人正在使用的端口,当然,只有一个在近等待中使用。