aboutsummaryrefslogtreecommitdiff
path: root/sshnodelay.c
diff options
context:
space:
mode:
authorBenjamin Fleischer <fleiben@gmail.com>2012-01-20 09:22:54 +0100
committerBenjamin Fleischer <fleiben@gmail.com>2012-01-20 10:02:14 +0100
commitb4023a19dd7ec7a099d2e0df491547cf3bb6bec3 (patch)
tree9181a610412c799c7815743eaf5ad3a21806bb27 /sshnodelay.c
parent49203ee923b2dcc8d4fd65c61b076e357c5e224d (diff)
downloadsshfs-b4023a19dd7ec7a099d2e0df491547cf3bb6bec3.tar
sshfs-b4023a19dd7ec7a099d2e0df491547cf3bb6bec3.tar.gz
sshfs-b4023a19dd7ec7a099d2e0df491547cf3bb6bec3.tar.bz2
sshfs-b4023a19dd7ec7a099d2e0df491547cf3bb6bec3.zip
Apply modified sshfs 2.2 patch from MacFUSE
Based on Amit Singh's work at http://code.google.com/p/macfuse/
Diffstat (limited to 'sshnodelay.c')
-rw-r--r--sshnodelay.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/sshnodelay.c b/sshnodelay.c
index 7518089..e1d9220 100644
--- a/sshnodelay.c
+++ b/sshnodelay.c
@@ -5,6 +5,32 @@
#include <netinet/in.h>
#include <netinet/tcp.h>
+#if __APPLE__
+
+int custom_connect(int sock, const struct sockaddr *addr, socklen_t addrlen);
+
+typedef struct interpose_s {
+ void *new_func;
+ void *orig_func;
+} interpose_t;
+
+static const interpose_t interposers[] \
+ __attribute__ ((section("__DATA, __interpose"))) = {
+ { (void *)custom_connect, (void *)connect },
+};
+
+int custom_connect(int sock, const struct sockaddr *addr, socklen_t addrlen)
+{
+ int res = connect(sock, addr, addrlen);
+ if (!res && addr->sa_family == AF_INET) {
+ int opt = 1;
+ setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt));
+ }
+ return res;
+}
+
+#else /* !__APPLE__ */
+
int connect(int sock, const struct sockaddr *addr, socklen_t addrlen)
{
int (*next_connect)(int, const struct sockaddr *, socklen_t) =
@@ -16,3 +42,5 @@ int connect(int sock, const struct sockaddr *addr, socklen_t addrlen)
}
return res;
}
+
+#endif /* !__APPLE__ */