diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2013-07-16 21:04:31 +0200 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2013-07-20 12:04:35 +0200 |
commit | 0e48cb4998a89a2adae95d97f3bce5f89c77d762 (patch) | |
tree | 754bf7e9765fbeb8f0fe9418d9d399335c7c7af8 /deps/uv/src/unix/tcp.c | |
parent | 221c689ebbac9bda42c005b7f0278ce420766b22 (diff) | |
download | android-node-v8-0e48cb4998a89a2adae95d97f3bce5f89c77d762.tar.gz android-node-v8-0e48cb4998a89a2adae95d97f3bce5f89c77d762.tar.bz2 android-node-v8-0e48cb4998a89a2adae95d97f3bce5f89c77d762.zip |
deps: upgrade libuv to 3ee4d3f
Diffstat (limited to 'deps/uv/src/unix/tcp.c')
-rw-r--r-- | deps/uv/src/unix/tcp.c | 98 |
1 files changed, 57 insertions, 41 deletions
diff --git a/deps/uv/src/unix/tcp.c b/deps/uv/src/unix/tcp.c index 2c81ff087a..6257f7d8eb 100644 --- a/deps/uv/src/unix/tcp.c +++ b/deps/uv/src/unix/tcp.c @@ -36,18 +36,20 @@ 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; + int err; if (uv__stream_fd(handle) != -1) return 0; - sockfd = uv__socket(domain, SOCK_STREAM, 0); + err = uv__socket(domain, SOCK_STREAM, 0); + if (err < 0) + return err; + sockfd = err; - if (sockfd == -1) - return uv__set_sys_error(handle->loop, errno); - - if (uv__stream_open((uv_stream_t*)handle, sockfd, flags)) { + err = uv__stream_open((uv_stream_t*) handle, sockfd, flags); + if (err) { close(sockfd); - return -1; + return err; } return 0; @@ -58,20 +60,22 @@ static int uv__bind(uv_tcp_t* tcp, int domain, struct sockaddr* addr, int addrsize) { + int err; int on; - if (maybe_new_socket(tcp, domain, UV_STREAM_READABLE|UV_STREAM_WRITABLE)) - return -1; + err = maybe_new_socket(tcp, domain, UV_STREAM_READABLE | UV_STREAM_WRITABLE); + if (err) + return err; on = 1; if (setsockopt(tcp->io_watcher.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) - return uv__set_sys_error(tcp->loop, errno); + return -errno; errno = 0; if (bind(tcp->io_watcher.fd, addr, addrsize) && errno != EADDRINUSE) - return uv__set_sys_error(tcp->loop, errno); + return -errno; - tcp->delayed_error = errno; + tcp->delayed_error = -errno; return 0; } @@ -81,18 +85,19 @@ static int uv__connect(uv_connect_t* req, struct sockaddr* addr, socklen_t addrlen, uv_connect_cb cb) { + int err; int r; assert(handle->type == UV_TCP); - if (handle->connect_req) - return uv__set_sys_error(handle->loop, EALREADY); + if (handle->connect_req != NULL) + return -EALREADY; /* FIXME(bnoordhuis) -EINVAL or maybe -EBUSY. */ - if (maybe_new_socket(handle, - addr->sa_family, - UV_STREAM_READABLE|UV_STREAM_WRITABLE)) { - return -1; - } + err = maybe_new_socket(handle, + addr->sa_family, + UV_STREAM_READABLE | UV_STREAM_WRITABLE); + if (err) + return err; handle->delayed_error = 0; @@ -108,9 +113,9 @@ static int uv__connect(uv_connect_t* req, * error. Solaris wants to report immediately--other unixes want to * wait. */ - handle->delayed_error = errno; + handle->delayed_error = -errno; else - return uv__set_sys_error(handle->loop, errno); + return -errno; } uv__req_init(handle->loop, req, UV_CONNECT); @@ -157,16 +162,16 @@ int uv_tcp_getsockname(uv_tcp_t* handle, socklen_t socklen; if (handle->delayed_error) - return uv__set_sys_error(handle->loop, handle->delayed_error); + return handle->delayed_error; if (uv__stream_fd(handle) < 0) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; /* FIXME(bnoordhuis) -EBADF */ /* sizeof(socklen_t) != sizeof(int) on some systems. */ socklen = (socklen_t) *namelen; - if (getsockname(uv__stream_fd(handle), name, &socklen) == -1) - return uv__set_sys_error(handle->loop, errno); + if (getsockname(uv__stream_fd(handle), name, &socklen)) + return -errno; *namelen = (int) socklen; return 0; @@ -179,16 +184,16 @@ int uv_tcp_getpeername(uv_tcp_t* handle, socklen_t socklen; if (handle->delayed_error) - return uv__set_sys_error(handle->loop, handle->delayed_error); + return handle->delayed_error; if (uv__stream_fd(handle) < 0) - return uv__set_sys_error(handle->loop, EINVAL); + return -EINVAL; /* FIXME(bnoordhuis) -EBADF */ /* sizeof(socklen_t) != sizeof(int) on some systems. */ socklen = (socklen_t) *namelen; - if (getpeername(uv__stream_fd(handle), name, &socklen) == -1) - return uv__set_sys_error(handle->loop, errno); + if (getpeername(uv__stream_fd(handle), name, &socklen)) + return -errno; *namelen = (int) socklen; return 0; @@ -197,9 +202,10 @@ int uv_tcp_getpeername(uv_tcp_t* handle, int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { static int single_accept = -1; + int err; if (tcp->delayed_error) - return uv__set_sys_error(tcp->loop, tcp->delayed_error); + return tcp->delayed_error; if (single_accept == -1) { const char* val = getenv("UV_TCP_SINGLE_ACCEPT"); @@ -209,11 +215,12 @@ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { if (single_accept) tcp->flags |= UV_TCP_SINGLE_ACCEPT; - if (maybe_new_socket(tcp, AF_INET, UV_STREAM_READABLE)) - return -1; + err = maybe_new_socket(tcp, AF_INET, UV_STREAM_READABLE); + if (err) + return err; if (listen(tcp->io_watcher.fd, backlog)) - return uv__set_sys_error(tcp->loop, errno); + return -errno; tcp->connection_cb = cb; @@ -248,19 +255,20 @@ int uv__tcp_nodelay(int fd, int on) { int uv__tcp_keepalive(int fd, int on, unsigned int delay) { if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on))) - return -1; + return -errno; #ifdef TCP_KEEPIDLE if (on && setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay))) - return -1; + return -errno; #endif /* Solaris/SmartOS, if you don't support keep-alive, * then don't advertise it in your system headers... */ + /* FIXME(bnoordhuis) That's possibly because sizeof(delay) should be 1. */ #if defined(TCP_KEEPALIVE) && !defined(__sun) if (on && setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE, &delay, sizeof(delay))) - return -1; + return -errno; #endif return 0; @@ -268,9 +276,13 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) { int uv_tcp_nodelay(uv_tcp_t* handle, int on) { - if (uv__stream_fd(handle) != -1) - if (uv__tcp_nodelay(uv__stream_fd(handle), on)) - return -1; + int err; + + if (uv__stream_fd(handle) != -1) { + err = uv__tcp_nodelay(uv__stream_fd(handle), on); + if (err) + return err; + } if (on) handle->flags |= UV_TCP_NODELAY; @@ -282,9 +294,13 @@ int uv_tcp_nodelay(uv_tcp_t* handle, int on) { int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) { - if (uv__stream_fd(handle) != -1) - if (uv__tcp_keepalive(uv__stream_fd(handle), on, delay)) - return -1; + int err; + + if (uv__stream_fd(handle) != -1) { + err =uv__tcp_keepalive(uv__stream_fd(handle), on, delay); + if (err) + return err; + } if (on) handle->flags |= UV_TCP_KEEPALIVE; |