diff options
author | Bert Belder <bertbelder@gmail.com> | 2011-09-04 22:25:40 +0200 |
---|---|---|
committer | Bert Belder <bertbelder@gmail.com> | 2011-09-04 22:25:40 +0200 |
commit | cb1a21b1d405312f8e5797039757b05a9733f569 (patch) | |
tree | f4415c894eef9e728036cd717e586769420fa703 /deps/uv/src/unix/tcp.c | |
parent | 766430c7430502a8c81f677dd5951c5967adb93e (diff) | |
download | android-node-v8-cb1a21b1d405312f8e5797039757b05a9733f569.tar.gz android-node-v8-cb1a21b1d405312f8e5797039757b05a9733f569.tar.bz2 android-node-v8-cb1a21b1d405312f8e5797039757b05a9733f569.zip |
Upgrade libuv to 7b87ff7c9b
Diffstat (limited to 'deps/uv/src/unix/tcp.c')
-rw-r--r-- | deps/uv/src/unix/tcp.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/deps/uv/src/unix/tcp.c b/deps/uv/src/unix/tcp.c index 591bbcc5b7..fb402e7e6b 100644 --- a/deps/uv/src/unix/tcp.c +++ b/deps/uv/src/unix/tcp.c @@ -122,6 +122,80 @@ int uv_tcp_bind6(uv_tcp_t* tcp, struct sockaddr_in6 addr) { } +int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, + int* namelen) { + socklen_t socklen; + int saved_errno; + int rv = 0; + + /* Don't clobber errno. */ + saved_errno = errno; + + if (handle->delayed_error) { + uv_err_new(handle->loop, handle->delayed_error); + rv = -1; + goto out; + } + + if (handle->fd < 0) { + uv_err_new(handle->loop, EINVAL); + rv = -1; + goto out; + } + + /* sizeof(socklen_t) != sizeof(int) on some systems. */ + socklen = (socklen_t)*namelen; + + if (getsockname(handle->fd, name, &socklen) == -1) { + uv_err_new(handle->loop, errno); + rv = -1; + } else { + *namelen = (int)socklen; + } + +out: + errno = saved_errno; + return rv; +} + + +int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, + int* namelen) { + socklen_t socklen; + int saved_errno; + int rv = 0; + + /* Don't clobber errno. */ + saved_errno = errno; + + if (handle->delayed_error) { + uv_err_new(handle->loop, handle->delayed_error); + rv = -1; + goto out; + } + + if (handle->fd < 0) { + uv_err_new(handle->loop, EINVAL); + rv = -1; + goto out; + } + + /* sizeof(socklen_t) != sizeof(int) on some systems. */ + socklen = (socklen_t)*namelen; + + if (getpeername(handle->fd, name, &socklen) == -1) { + uv_err_new(handle->loop, errno); + rv = -1; + } else { + *namelen = (int)socklen; + } + +out: + errno = saved_errno; + return rv; +} + + int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { int r; |