summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/tcp.c
diff options
context:
space:
mode:
authorBert Belder <bertbelder@gmail.com>2011-09-04 22:25:40 +0200
committerBert Belder <bertbelder@gmail.com>2011-09-04 22:25:40 +0200
commitcb1a21b1d405312f8e5797039757b05a9733f569 (patch)
treef4415c894eef9e728036cd717e586769420fa703 /deps/uv/src/unix/tcp.c
parent766430c7430502a8c81f677dd5951c5967adb93e (diff)
downloadandroid-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.c74
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;