From d8ff25f03250556c3ed99dbb7ad65d1cc627e1d3 Mon Sep 17 00:00:00 2001 From: Federico Ceratto Date: Wed, 13 Feb 2019 19:57:25 +0000 Subject: [PATCH] Provide access to getsockname()/getpeername() Port of #3323 with added tests --- lib/pure/asyncnet.nim | 12 ++++++++++++ tests/async/tasyncawait.nim | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/lib/pure/asyncnet.nim b/lib/pure/asyncnet.nim index 1c0681fada..56bda737a6 100644 --- a/lib/pure/asyncnet.nim +++ b/lib/pure/asyncnet.nim @@ -166,6 +166,18 @@ proc newAsyncSocket*(domain: Domain = AF_INET, sockType: SockType = SOCK_STREAM, raiseOSError(osLastError()) result = newAsyncSocket(fd, domain, sockType, protocol, buffered) +proc getLocalAddr*(socket: AsyncSocket): (string, Port) = + ## Get the socket's local address and port number. + ## + ## This is high-level interface for `getsockname`:idx:. + getLocalAddr(socket.fd, socket.domain) + +proc getPeerAddr*(socket: AsyncSocket): (string, Port) = + ## Get the socket's peer address and port number. + ## + ## This is high-level interface for `getpeername`:idx:. + getPeerAddr(socket.fd, socket.domain) + proc newAsyncSocket*(domain, sockType, protocol: cint, buffered = true): AsyncSocket = ## Creates a new asynchronous socket. diff --git a/tests/async/tasyncawait.nim b/tests/async/tasyncawait.nim index 1e6cf3761a..063c8317cc 100644 --- a/tests/async/tasyncawait.nim +++ b/tests/async/tasyncawait.nim @@ -26,6 +26,10 @@ proc launchSwarm(port: Port) {.async.} = proc readMessages(client: AsyncFD) {.async.} = # wrapping the AsyncFd into a AsyncSocket object var sockObj = newAsyncSocket(client) + var (ipaddr, port) = sockObj.getPeerAddr() + doAssert ipaddr == "127.0.0.1" + (ipaddr, port) = sockObj.getLocalAddr() + doAssert ipaddr == "127.0.0.1" while true: var line = await recvLine(sockObj) if line == "":