我从未写过这样的东西, 如何使用c程序检查端口是否为空 在Linux环境中 非常感谢。
ps寻找方法,不使用bind或connect并检查它是否失败。
编辑 我无法使用绑定或连接,寻找更快的方法来找到连续空闲的3k端口
答案 0 :(得分:2)
更好的方法是使用下一个空闲端口,你也可以使用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));
另请参阅How to bind to any available port?了解更多信息
答案 1 :(得分:0)
使用system()或popen()
运行以下命令netstat -antu
它将列出您机器的所有已用端口。 您需要解析该命令的输出,然后您将拥有所有繁忙端口的列表。
答案 2 :(得分:0)
你如何直接使用bind(),如果它没有成功,你可以试试另一个端口。
你刚刚检查过,一个端口是免费的,但是有人已经使用它会是一个竞争条件,所以检查端口是否空闲然后绑定它是不可能的
您也可以阅读/proc/net/tcp
寻求帮助,但竞争条件仍然存在。
答案 3 :(得分:-1)
如果你需要检查一个或几个使用bind,如果它工作然后它是免费的(并且不要忘记释放套接字)
如果像我这样你需要检查许多端口,那么运行对我有用的东西 system('netstat -tulpn')并将输出重定向到文件/变量 然后在此信息中搜索“:{yourport}”
为我工作
PS 如果像我一样你需要让它们自由,请告诉你的计算机不要随意分配该区域的端口