diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-10-02 17:32:11 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-10-03 09:47:08 -0700 |
| commit | 6fef4c1e5bf73ad76e7cdcfb65540f1308045339 (patch) | |
| tree | ca50ca2c27fb2d0a44ee9dc317cc0b673eaf9e66 /src/platform/posix | |
| parent | 6e945e18f3f3e9b7f9ee614eac6d3bf681f768d9 (diff) | |
| download | nng-6fef4c1e5bf73ad76e7cdcfb65540f1308045339.tar.gz nng-6fef4c1e5bf73ad76e7cdcfb65540f1308045339.tar.bz2 nng-6fef4c1e5bf73ad76e7cdcfb65540f1308045339.zip | |
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.
Diffstat (limited to 'src/platform/posix')
| -rw-r--r-- | src/platform/posix/posix_aio.h | 2 | ||||
| -rw-r--r-- | src/platform/posix/posix_pipedesc.c | 24 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcp.c | 12 |
3 files changed, 38 insertions, 0 deletions
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 @@ -288,6 +288,30 @@ nni_posix_pipedesc_send(nni_posix_pipedesc *pd, nni_aio *aio) } 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) { nni_posix_pipedesc *pd; 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 |
