summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/tcp.c
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2012-12-13 20:23:01 +0100
committerBen Noordhuis <info@bnoordhuis.nl>2012-12-13 20:23:01 +0100
commit6cf68aead6886d397772ea176a9f5c35fdb63071 (patch)
treec9c650c69d13bb84000181b16834618069de4a79 /deps/uv/src/unix/tcp.c
parent0506d294dc5a51556e935a50a754aa7cbd7a7977 (diff)
downloadandroid-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.c50
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...
*/