我有一个跨平台的 Golang 应用程序,它监听 Unix 文件套接字,如下所示:
listener, err := net.Listen("unix", socketFilePath)
if err != nil {
return err
}
当此代码在 Windows(特别是 Win10 22H2)中运行时,有时会失败,因为另一个进程已在监听该套接字:
listen unix [my socket path]: bind: Only one usage of each socket address
(protocol/network address/port) is normally permitted.
如何找到已绑定到套接字的进程?我已经验证我的应用程序进程的实例均未运行。
我的搜索使我找到了有关打开文件的各种信息手柄并打开网络套接字,但据我所知,Windows 对待文件套接字与这两者都不同,所以这些工具和技术并不能揭示我所寻找的东西。
未能解决我的问题:
答案1
如何找到已绑定到套接字的进程?我已经验证我的应用程序进程的实例均未运行。
您的错误消息也是跨平台的。即使进程退出,基于“Unix”文件的套接字也会不是自动删除;进程本身负责在尝试新的绑定/侦听之前必须执行的 unlink()。手动删除套接字应该允许您再次侦听它。
答案2
如何找到已绑定到套接字的进程?我已经验证我的应用程序进程的实例均未运行。
使用SysInternals TcpView工具。