From 6fef4c1e5bf73ad76e7cdcfb65540f1308045339 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Mon, 2 Oct 2017 17:32:11 -0700 Subject: fixes #5 Address properties Added TCP socket address properties on pipes. This adds the plumbing for the various platform specifics, and includes both v4 and v6 handling. We've included a TCPv6 test as well. --- src/platform/posix/posix_aio.h | 2 ++ src/platform/posix/posix_pipedesc.c | 24 ++++++++++++++++++++++++ src/platform/posix/posix_tcp.c | 12 ++++++++++++ 3 files changed, 38 insertions(+) (limited to 'src/platform/posix') diff --git a/src/platform/posix/posix_aio.h b/src/platform/posix/posix_aio.h index 6c7db9e1..fe677591 100644 --- a/src/platform/posix/posix_aio.h +++ b/src/platform/posix/posix_aio.h @@ -28,6 +28,8 @@ extern void nni_posix_pipedesc_fini(nni_posix_pipedesc *); extern void nni_posix_pipedesc_recv(nni_posix_pipedesc *, nni_aio *); extern void nni_posix_pipedesc_send(nni_posix_pipedesc *, nni_aio *); extern void nni_posix_pipedesc_close(nni_posix_pipedesc *); +extern int nni_posix_pipedesc_peername(nni_posix_pipedesc *, nni_sockaddr *); +extern int nni_posix_pipedesc_sockname(nni_posix_pipedesc *, nni_sockaddr *); extern int nni_posix_epdesc_init(nni_posix_epdesc **); extern void nni_posix_epdesc_set_local(nni_posix_epdesc *, void *, int); diff --git a/src/platform/posix/posix_pipedesc.c b/src/platform/posix/posix_pipedesc.c index 8a087256..a025f83c 100644 --- a/src/platform/posix/posix_pipedesc.c +++ b/src/platform/posix/posix_pipedesc.c @@ -287,6 +287,30 @@ nni_posix_pipedesc_send(nni_posix_pipedesc *pd, nni_aio *aio) nni_mtx_unlock(&pd->mtx); } +int +nni_posix_pipedesc_peername(nni_posix_pipedesc *pd, nni_sockaddr *sa) +{ + struct sockaddr_storage ss; + socklen_t sslen = sizeof(ss); + + if (getpeername(pd->node.fd, (void *) &ss, &sslen) != 0) { + return (nni_plat_errno(errno)); + } + return (nni_posix_sockaddr2nn(sa, &ss)); +} + +int +nni_posix_pipedesc_sockname(nni_posix_pipedesc *pd, nni_sockaddr *sa) +{ + struct sockaddr_storage ss; + socklen_t sslen = sizeof(ss); + + if (getsockname(pd->node.fd, (void *) &ss, &sslen) != 0) { + return (nni_plat_errno(errno)); + } + return (nni_posix_sockaddr2nn(sa, &ss)); +} + int nni_posix_pipedesc_init(nni_posix_pipedesc **pdp, int fd) { diff --git a/src/platform/posix/posix_tcp.c b/src/platform/posix/posix_tcp.c index cc5466cb..e03f8056 100644 --- a/src/platform/posix/posix_tcp.c +++ b/src/platform/posix/posix_tcp.c @@ -105,4 +105,16 @@ nni_plat_tcp_pipe_recv(nni_plat_tcp_pipe *p, nni_aio *aio) nni_posix_pipedesc_recv((void *) p, aio); } +int +nni_plat_tcp_pipe_peername(nni_plat_tcp_pipe *p, nni_sockaddr *sa) +{ + return (nni_posix_pipedesc_peername((void *) p, sa)); +} + +int +nni_plat_tcp_pipe_sockname(nni_plat_tcp_pipe *p, nni_sockaddr *sa) +{ + return (nni_posix_pipedesc_sockname((void *) p, sa)); +} + #endif // NNG_PLATFORM_POSIX -- cgit v1.2.3-70-g09d2