diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2012-12-13 20:23:01 +0100 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2012-12-13 20:23:01 +0100 |
commit | 6cf68aead6886d397772ea176a9f5c35fdb63071 (patch) | |
tree | c9c650c69d13bb84000181b16834618069de4a79 /deps/uv/src/unix/tcp.c | |
parent | 0506d294dc5a51556e935a50a754aa7cbd7a7977 (diff) | |
download | android-node-v8-6cf68aead6886d397772ea176a9f5c35fdb63071.tar.gz android-node-v8-6cf68aead6886d397772ea176a9f5c35fdb63071.tar.bz2 android-node-v8-6cf68aead6886d397772ea176a9f5c35fdb63071.zip |
deps: upgrade libuv to e079a99
Diffstat (limited to 'deps/uv/src/unix/tcp.c')
-rw-r--r-- | deps/uv/src/unix/tcp.c | 50 |
1 files changed, 21 insertions, 29 deletions
diff --git a/deps/uv/src/unix/tcp.c b/deps/uv/src/unix/tcp.c index 7c86e7089f..5229369254 100644 --- a/deps/uv/src/unix/tcp.c +++ b/deps/uv/src/unix/tcp.c @@ -37,7 +37,7 @@ int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* tcp) { static int maybe_new_socket(uv_tcp_t* handle, int domain, int flags) { int sockfd; - if (handle->io_watcher.fd != -1) + if (uv__stream_fd(handle) != -1) return 0; sockfd = uv__socket(domain, SOCK_STREAM, 0); @@ -58,29 +58,21 @@ static int uv__bind(uv_tcp_t* tcp, int domain, struct sockaddr* addr, int addrsize) { - int saved_errno; - int status; - - saved_errno = errno; - status = -1; + int on; if (maybe_new_socket(tcp, domain, UV_STREAM_READABLE|UV_STREAM_WRITABLE)) return -1; - tcp->delayed_error = 0; - if (bind(tcp->io_watcher.fd, addr, addrsize) == -1) { - if (errno == EADDRINUSE) { - tcp->delayed_error = errno; - } else { - uv__set_sys_error(tcp->loop, errno); - goto out; - } - } - status = 0; + on = 1; + if (setsockopt(tcp->io_watcher.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) + return uv__set_sys_error(tcp->loop, errno); -out: - errno = saved_errno; - return status; + errno = 0; + if (bind(tcp->io_watcher.fd, addr, addrsize) && errno != EADDRINUSE) + return uv__set_sys_error(tcp->loop, errno); + + tcp->delayed_error = errno; + return 0; } @@ -105,7 +97,7 @@ static int uv__connect(uv_connect_t* req, handle->delayed_error = 0; do - r = connect(handle->io_watcher.fd, addr, addrlen); + r = connect(uv__stream_fd(handle), addr, addrlen); while (r == -1 && errno == EINTR); if (r == -1) { @@ -174,7 +166,7 @@ int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, goto out; } - if (handle->io_watcher.fd < 0) { + if (uv__stream_fd(handle) < 0) { uv__set_sys_error(handle->loop, EINVAL); rv = -1; goto out; @@ -183,7 +175,7 @@ int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, /* sizeof(socklen_t) != sizeof(int) on some systems. */ socklen = (socklen_t)*namelen; - if (getsockname(handle->io_watcher.fd, name, &socklen) == -1) { + if (getsockname(uv__stream_fd(handle), name, &socklen) == -1) { uv__set_sys_error(handle->loop, errno); rv = -1; } else { @@ -211,7 +203,7 @@ int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, goto out; } - if (handle->io_watcher.fd < 0) { + if (uv__stream_fd(handle) < 0) { uv__set_sys_error(handle->loop, EINVAL); rv = -1; goto out; @@ -220,7 +212,7 @@ int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, /* sizeof(socklen_t) != sizeof(int) on some systems. */ socklen = (socklen_t)*namelen; - if (getpeername(handle->io_watcher.fd, name, &socklen) == -1) { + if (getpeername(uv__stream_fd(handle), name, &socklen) == -1) { uv__set_sys_error(handle->loop, errno); rv = -1; } else { @@ -320,8 +312,8 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) { int uv_tcp_nodelay(uv_tcp_t* handle, int on) { - if (handle->io_watcher.fd != -1) - if (uv__tcp_nodelay(handle->io_watcher.fd, on)) + if (uv__stream_fd(handle) != -1) + if (uv__tcp_nodelay(uv__stream_fd(handle), on)) return -1; if (on) @@ -334,8 +326,8 @@ int uv_tcp_nodelay(uv_tcp_t* handle, int on) { int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) { - if (handle->io_watcher.fd != -1) - if (uv__tcp_keepalive(handle->io_watcher.fd, on, delay)) + if (uv__stream_fd(handle) != -1) + if (uv__tcp_keepalive(uv__stream_fd(handle), on, delay)) return -1; if (on) @@ -343,7 +335,7 @@ int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) { else handle->flags &= ~UV_TCP_KEEPALIVE; - /* TODO Store delay if handle->io_watcher.fd == -1 but don't want to enlarge + /* TODO Store delay if uv__stream_fd(handle) == -1 but don't want to enlarge * uv_tcp_t with an int that's almost never used... */ |