ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags) { _recvmsg = ( ssize_t (*) (int sockfd, struct msghdr *msg, int flags) ) dlsym(RTLD_NEXT, "recvmsg"); char *errormsg; errormsg = dlerror(); if (errormsg != NULL) { PRINT_DEBUG("\n failed to load the original symbol %s", errormsg); } PRINT_DEBUG ("sockfd got into recvmsg = %d",sockfd); if (checkFinsHistory(getpid(),sockfd) != 0) { return ( fins_recvmsg(sockfd, msg,flags) ); } else { PRINT_DEBUG("The original recvmsg should not be called ,something is WRONG!!!"); return (_recvmsg(sockfd, msg,flags)); } } // end of recvmsg
ssize_t recvmsg(int sockfd, struct msghdr * msg, int flags) { libc_func(recvmsg, int, int, struct msghdr *, int); ssize_t ret = _recvmsg(sockfd, msg, flags); netlink_recvmsg(sockfd, msg, flags, ret); return ret; }
static int __msgread(int sock, void *buf, size_t cnt) { struct iovec iov[1]; struct msghdr msg; union { struct cmsghdr cmsg; char control[CMSG_SPACE(sizeof(struct cmsgcred))]; } cm; bzero((char *)&cm, sizeof(cm)); iov[0].iov_base = buf; iov[0].iov_len = cnt; msg.msg_iov = iov; msg.msg_iovlen = 1; msg.msg_name = NULL; msg.msg_namelen = 0; msg.msg_control = (caddr_t)&cm; msg.msg_controllen = CMSG_SPACE(sizeof(struct cmsgcred)); msg.msg_flags = 0; return(_recvmsg(sock, &msg, 0)); }