ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags) { int len = 0; for (int i=0; i<msg->msg_iovlen; i++) len += msg->msg_iov[i].iov_len; bw_bytes += len; if (bw_mustDrop()) return len; printf("sending %d bytes\n", len); return __libc_sendmsg(sockfd, msg, flags); }
ssize_t __sock_sendmsg_r(int fd, const struct msghdr *msg, int flags) { ssize_t ret = -1; pthread_cleanup_push_defer_np(__sock_putuser, &fd); if (__sock_getuser(fd)) { if ((ret = __sock_sendmsg(fd, msg, flags)) == -1) pthread_testcancel(); __sock_putuser(&fd); } else { if ((ret = __libc_sendmsg(fd, msg, flags)) == -1) pthread_testcancel(); } pthread_cleanup_pop_restore_np(0); return (ret); }