| 75 | { "#0", "stream", "dgram", "raw", "rdm", "seqpacket" }; |
| 76 | |
| 77 | static int |
| 78 | pcblist_sysctl(int type, char **bufp) |
| 79 | { |
| 80 | char *buf; |
| 81 | size_t len; |
| 82 | char mibvar[sizeof "net.local.seqpacket.pcblist"]; |
| 83 | |
| 84 | snprintf(mibvar, sizeof(mibvar), "net.local.%s.pcblist", socktype[type]); |
| 85 | |
| 86 | len = 0; |
| 87 | if (sysctlbyname(mibvar, 0, &len, 0, 0) < 0) { |
| 88 | if (errno != ENOENT) |
| 89 | xo_warn("sysctl: %s", mibvar); |
| 90 | return (-1); |
| 91 | } |
| 92 | if ((buf = malloc(len)) == NULL) { |
| 93 | xo_warnx("malloc %lu bytes", (u_long)len); |
| 94 | return (-2); |
| 95 | } |
| 96 | if (sysctlbyname(mibvar, buf, &len, 0, 0) < 0) { |
| 97 | xo_warn("sysctl: %s", mibvar); |
| 98 | free(buf); |
| 99 | return (-2); |
| 100 | } |
| 101 | *bufp = buf; |
| 102 | return (0); |
| 103 | } |
| 104 | |
| 105 | #ifndef FSTACK |
| 106 | static int |