[英]how to check if a port is free in linux using c
我从来没有写过这样的东西,如何在Linux环境中使用c程序检查端口是否为空,非常感谢。
ps寻找方法,不使用bind或connect并检查它是否失败。
编辑我不能使用绑定或连接,寻找更快的方法来找到连续免费的3k端口
更好的方法是使用下一个空闲端口,你也可以使用0端口绑定将使用下一个可用端口。
您可以通过以下代码获取bind()选择的端口
struct sockaddr_in sin;
socklen_t len = sizeof(sin);
if (getsockname(sock, (struct sockaddr *)&sin, &len) != -1)
printf("port number %d\n", ntohs(sin.sin_port));
另请参阅如何绑定到任何可用端口? 更多信息
使用system()或popen()运行以下命令
netstat -antu
它将列出您机器的所有使用端口。 您需要解析该命令的输出,然后您将拥有所有繁忙端口的列表。
您如何直接使用bind(),如果不成功,您可以尝试另一个端口。
你刚刚检查过,一个端口是免费的,但是有人已经使用它将是一个竞争条件,所以检查端口是否空闲然后绑定它是不可能的
你也可以阅读/proc/net/tcp
寻求帮助,但竞争条件仍然可能发生。
我有同样的问题,问题是你需要检查一个端口或许多端口
如果你只需要检查一个或几个使用绑定,如果它工作,那么它是免费的(并且不要忘记释放套接字)
如果像我一样你需要检查许多端口,那么对我有用的是运行system('netstat -tulpn')并将输出重定向到文件/变量然后在此信息搜索“:{yourport}”
为我工作
ps如果像我一样你需要让它们自由,告诉你的计算机不要随意分配该区域的端口
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.