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
예제 #2
0
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;
}
예제 #3
0
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));
}