INTERPOSE (recvfrom, ssize_t, int sockfd, void *buf, size_t len, int flags, struct sockaddr * src_addr, socklen_t * addrlen) { ssize_t ret; v4v_addr_t peer = { 0 }; CHECK_INTERPOSE (recvfrom); if (!is_our_fd (sockfd)) return orig_recvfrom (sockfd, buf, len, flags, src_addr, addrlen); ret = v4v_recvfrom (sockfd, buf, len, flags, &peer); if (is_our_af (sockfd)) { v4v_map_v4va_to_sxenv4v (src_addr, addrlen, &peer); } else { v4v_map_v4va_to_sin (src_addr, addrlen, &peer); } return ret; }
/* Overload recvfrom */ ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) { printf("Called recvfrom\n"); return orig_recvfrom(s, buf, len, flags, from, fromlen); }