我正在试图找出为什么我的Mac OS X计算机上的netstat
会打印“两次获得4次”等内容。
例如:
$ netstat | head -15
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
[...]
tcp4 0 0 localhost.56892 localhost.26164 ESTABLISHED
got 4 twice
got 16 twice
got 1 twice
got 4 twice
got 4 twice
got 8 twice
邮件由netstat的inet.c打印,函数protopr
基本上执行以下操作:
sysctlbyname(3)
拨打电话net.inet.tcp.pcblist_n
xgn_kind
获取PCB列表(我猜?)xgn_kind
"got %d twice"
设置了一点。如果它看到任何两次,则会发出消息void
protopr(uint32_t proto, /* for sysctl version we pass proto # */
char *name, int af)
{
/* ... */
if (sysctlbyname(mibvar, 0, &len, 0, 0) < 0) {
if (errno != ENOENT)
warn("sysctl: %s", mibvar);
return;
}
/* ... */
for (next = buf + ROUNDUP64(xig->xig_len);
next < buf + len;
next += ROUNDUP64(xgn->xgn_len))
{
/* ... */
if ((which & xgn->xgn_kind) == 0) {
which |= xgn->xgn_kind;
/* ... */
} else {
printf("got %d twice\n", xgn->xgn_kind);
}
/* ... */
}
。我已经删除了代码的相关部分:
sysctl
我的问题是,最后:
为什么会这样?这是从sysctl
回来的错误数据吗?上面的循环是不正确的,即,{{1}}实际上可以返回几种结构吗?
请注意,我正在运行Mac OS X - 代码确实与FreeBSD's略有不同。