如何检查端口是否可用

时间:2009-11-18 13:48:22

标签: c linux sockets

Linux(内核2.6.20)上是否有API函数可用于检查是否使用了绑定和/或连接的给定TCP / IP端口?

bind()是唯一的解决方案(使用带SO_REUSEADDR选项的套接字绑定到给定端口,然后关闭它吗?

3 个答案:

答案 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不允许您使用其他人正在使用的端口,当然,只有一个在近等待中使用。