aboutsummaryrefslogtreecommitdiff
path: root/sshnodelay.c
diff options
context:
space:
mode:
authorJulio Merino <jmmv@google.com>2016-02-08 11:12:22 -0500
committerJulio Merino <jmmv@meroh.net>2016-02-08 20:46:37 -0500
commitddbe3bee444909420049a68f7891563f0e431669 (patch)
tree1273577a0fd0fa7ce54b426688938b785b442666 /sshnodelay.c
parentb10d21db3185a2b25e3bd35579f57d3c7b8d882e (diff)
parent9bcb98945405db3d64cd8dca409aa18990ff1929 (diff)
downloadsshfs-ddbe3bee444909420049a68f7891563f0e431669.tar
sshfs-ddbe3bee444909420049a68f7891563f0e431669.tar.gz
sshfs-ddbe3bee444909420049a68f7891563f0e431669.tar.bz2
sshfs-ddbe3bee444909420049a68f7891563f0e431669.zip
Merge remote-tracking branch 'osxfuse/master' into merge-osxfuse
Pull in all changes from osxfuse's fork of sshfs into libfuse's sshfs. There need not be two different copies of this codebase, particularly because libfuse's version is already autoconf-ified and can support multiple platforms. The merge is mostly clean with just a few manual edits to resolve conflicts.
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__ */