initial commit
[netboost.git] / netboost.c
1 #define _GNU_SOURCE
2 #include <sys/socket.h>
3 #include <netinet/ip.h>
4 #include <netinet/tcp.h>
5 #include <dlfcn.h>
6 #include <string.h>
7
8 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
9   static int (*real_connect)(int, const struct sockaddr *, socklen_t);
10   if (!real_connect) {
11     real_connect = dlsym(RTLD_NEXT, "connect");
12   }
13   int res = real_connect(sockfd, addr, addrlen);
14   if (res != 0) return res;
15
16   static const int one = 1;
17   setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
18   return 0;
19 }
20
21 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
22   static int (*real_accept)(int, struct sockaddr *, socklen_t *);
23   if (!real_accept) {
24     real_accept = dlsym(RTLD_NEXT, "accept");
25   }
26   int res = real_accept(sockfd, addr, addrlen);
27   if (res == -1) return res;
28
29   static const int one = 1;
30   setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
31
32   return res;
33 }