Unix套接字上的连接数

4

如果给定一个任意的Unix套接字地址,我是否能够通过POSIX API调用获取它上面的连接数?

还是说我必须遍历/proc文件系统来实现?


1
你应该明确“任意的Unix套接字地址”是什么意思;考虑到标签,你可能指的是“任意的Unix域套接字”,而不是“在Unix机器上任意套接字地址”。下面有一条评论表明你也在使用Cygwin,这表明你的主机是Windows。 - Jonathan Leffler
没错,那就是我想说的,“任意的Unix域套接字”。我之所以提到POSIX,而不是cygwin,是因为我希望将问题的解决方案尽可能地跨平台。 - rhlee
1个回答

3

我会假设你是指端口上当前连接的数量,而不是我的第一反应:套接字 fd 的总连接计数。恐怕最可移植的方法是使用 popen("netstat -n", "r") 并尝试解析它。 POSIX 在系统/网络管理工具方面为我们提供了很少的支持。


1
是的,我只需要获取 Unix 域套接字上当前连接数。不幸的是,我的目标系统是 Cygwin,netstat 在其上不可用作为一个软件包,也无法编译源代码。因此,我希望有一个 API 调用可以提供这些信息。 - rhlee
你是如何获取Unix域套接字的?是从你编写的程序中获取吗?我不认为你会找到一个简单的API调用来完成你想要的功能。但是,如果我们知道上下文,通过一些函数调用等方式是可能实现的...@rhlee需要更多细节。 - Chimera
@Jim Norton:基本上我在cygwin上使用/修改dtach。Dtach使用命名的bsd套接字进行主/从通信,因此会话的命名空间也是如此。如果dtach意外终止,则套接字仍然存在,因此您不知道会话是否仍在运行。我认为我正在尝试的有效方法是对socket进行lsof,但它不起作用http://unix.derkeiler.com/Newsgroups/comp.unix.admin/2003-12/0019.html。看来没有真正的方法可以解决这个问题,所以我会把答案给Alan。但是,您提到了一些函数调用?如果您能详细说明,我将不胜感激Jim。 - rhlee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接