if (sendmsg(fd, &msg, 0) < 0) {
if (errno == EINTR)
continue;
+
perror("sendmsg");
return \-1;
}
+
return 0;
}
}
for (attr = (struct rtattr *) (diag + 1);
RTA_OK(attr, rta_len); attr = RTA_NEXT(attr, rta_len)) {
switch (attr\->rta_type) {
- case UNIX_DIAG_NAME:
- if (!path_len) {
- path_len = RTA_PAYLOAD(attr);
- if (path_len > sizeof(path) \- 1)
- path_len = sizeof(path) \- 1;
- memcpy(path, RTA_DATA(attr), path_len);
- path[path_len] = '\\0';
- }
- break;
- case UNIX_DIAG_PEER:
- if (RTA_PAYLOAD(attr) >= sizeof(peer))
- peer = *(unsigned int *) RTA_DATA(attr);
- break;
+ case UNIX_DIAG_NAME:
+ if (!path_len) {
+ path_len = RTA_PAYLOAD(attr);
+ if (path_len > sizeof(path) \- 1)
+ path_len = sizeof(path) \- 1;
+ memcpy(path, RTA_DATA(attr), path_len);
+ path[path_len] = '\\0';
+ }
+ break;
+
+ case UNIX_DIAG_PEER:
+ if (RTA_PAYLOAD(attr) >= sizeof(peer))
+ peer = *(unsigned int *) RTA_DATA(attr);
+ break;
}
}
printf(", peer=%u", peer);
if (path_len)
- printf(", name=%s%s", *path ? "" : "@", *path ? path : path + 1);
+ printf(", name=%s%s", *path ? "" : "@",
+ *path ? path : path + 1);
putchar('\\n');
return 0;
if (ret < 0) {
if (errno == EINTR)
continue;
+
perror("recvmsg");
return \-1;
}
fputs("!NLMSG_OK\\n", stderr);
return \-1;
}
+
for (; NLMSG_OK(h, ret); h = NLMSG_NEXT(h, ret)) {
if (h\->nlmsg_type == NLMSG_DONE)
return 0;
+
if (h\->nlmsg_type == NLMSG_ERROR) {
const struct nlmsgerr *err = NLMSG_DATA(h);
errno = \-err\->error;
perror("NLMSG_ERROR");
}
+
return \-1;
}
+
if (h\->nlmsg_type != SOCK_DIAG_BY_FAMILY) {
fprintf(stderr, "unexpected nlmsg_type %u\\n",
(unsigned) h\->nlmsg_type);