#include #include #include #include #include int socket(int domain, int type, int protocol){ static int (*real_socket) (int, int, int) = NULL; if(!real_socket){ real_socket = dlsym(RTLD_NEXT, "socket"); } int fd = real_socket(domain, type, protocol); int enable = 1; if(domain == AF_INET && type == SOCK_STREAM){ setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(enable)); } return fd; } ssize_t send(int sockfd, const void* buf, size_t len, int flags){ static ssize_t (*real_send) (int, void*, size_t, int) = NULL; if(!real_send){ real_send = dlsym(RTLD_NEXT, "send"); } ssize_t rv = 0; for(size_t u = 0; u < len; u++){ ssize_t sent = real_send(sockfd, buf + u, 1, flags); if(sent < 0){ return 1; } rv += sent; } return rv; }