diff options
author | Julio Merino <jmmv@google.com> | 2016-02-08 11:12:22 -0500 |
---|---|---|
committer | Julio Merino <jmmv@meroh.net> | 2016-02-08 20:46:37 -0500 |
commit | ddbe3bee444909420049a68f7891563f0e431669 (patch) | |
tree | 1273577a0fd0fa7ce54b426688938b785b442666 /sshnodelay.c | |
parent | b10d21db3185a2b25e3bd35579f57d3c7b8d882e (diff) | |
parent | 9bcb98945405db3d64cd8dca409aa18990ff1929 (diff) | |
download | sshfs-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.c | 28 |
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__ */ |