2016-03-08 39 views
0

我收到“bind:Address already in use”错误。有什么方法可以找到哪个套接字被绑定?当我找到它时,我该如何解除链接?如何查找和取消绑定套接字

+0

你需要杀死它创建的套接字的过程中,可能所有的儿童进程。使用'netstat -apn | grep $ portnumber'来找到它们。 –

回答

1

套接字绑定到一个进程。你只需要使用发现进程ID:

netstat -nap

-p标志将包括进程ID ,但你必须要根

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 11152/lighttpd

在这个例子中港8080被分配给lighttpd,进程号为11152

列出打开文件的命令流程(lsof的)会给类似的信息

一旦你找到进程ID,你可以简单地通过发出杀死它:

kill [pid]

+0

这不意味着我需要知道端口号吗?我确定我问的太多了,但有什么方法可以在“bind:Address already in use”时找到绑定哪个端口的方法? –

+0

当你运行一个进程时,你得到“Address Already in use”是因为那个进程试图绑定一个特定的端口。 例如,Web服务器默认尝试绑定端口80(除非您通过编辑配置文件来修改该端口) 给我更多关于您正在运行的进程的详细信息(您是在编码什么?),我可以帮助你了解哪个端口可能试图绑定() – Sainti

+0

如果你通过strace运行一个程序,你会看到该进程所做的每个系统调用,包括bind()系统调用。 例如:'strace。/ myprogram'你会得到一个巨大的输出,类似于: bind(3,{sa_family = AF_INET,sin_port = htons(8080),sin_addr = inet_addr(“0.0.0.0”)},16 )= 0' – Sainti