return fa == fb;
}
-void cmsg_close_all(struct msghdr *mh) {
- assert(mh);
-
- struct cmsghdr *cmsg;
- CMSG_FOREACH(cmsg, mh) {
- if (cmsg->cmsg_level != SOL_SOCKET)
- continue;
-
- if (cmsg->cmsg_type == SCM_RIGHTS)
- close_many(CMSG_TYPED_DATA(cmsg, int),
- (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int));
- else if (cmsg->cmsg_type == SCM_PIDFD) {
- assert(cmsg->cmsg_len == CMSG_LEN(sizeof(int)));
- safe_close(*CMSG_TYPED_DATA(cmsg, int));
- }
- }
-}
-
bool fdname_is_valid(const char *s) {
const char *p;
int fd_validate(int fd);
int same_fd(int a, int b);
-void cmsg_close_all(struct msghdr *mh);
-
bool fdname_is_valid(const char *s);
int fd_get_path(int fd, char **ret);
return 0;
}
+
+void cmsg_close_all(struct msghdr *mh) {
+ assert(mh);
+
+ struct cmsghdr *cmsg;
+ CMSG_FOREACH(cmsg, mh) {
+ if (cmsg->cmsg_level != SOL_SOCKET)
+ continue;
+
+ if (cmsg->cmsg_type == SCM_RIGHTS)
+ close_many(CMSG_TYPED_DATA(cmsg, int),
+ (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int));
+ else if (cmsg->cmsg_type == SCM_PIDFD) {
+ assert(cmsg->cmsg_len == CMSG_LEN(sizeof(int)));
+ safe_close(*CMSG_TYPED_DATA(cmsg, int));
+ }
+ }
+}
int netlink_socket_get_multicast_groups(int fd, size_t *ret_len, uint32_t **ret_groups);
int socket_get_cookie(int fd, uint64_t *ret);
+
+void cmsg_close_all(struct msghdr *mh);