Merge pull request #69 from status-im/fix-64

Fix #64
This commit is contained in:
Eugene Kabanov 2020-01-28 16:08:56 +02:00 committed by GitHub
commit e3ced62d4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 5 deletions

View File

@ -65,6 +65,28 @@ type
const
DgramTransportTrackerName = "datagram.transport"
proc remoteAddress*(transp: DatagramTransport): TransportAddress =
## Returns ``transp`` remote socket address.
if transp.remote.family == AddressFamily.None:
var saddr: Sockaddr_storage
var slen = SockLen(sizeof(saddr))
if getpeername(SocketHandle(transp.fd), cast[ptr SockAddr](addr saddr),
addr slen) != 0:
raiseTransportOsError(osLastError())
fromSAddr(addr saddr, slen, transp.remote)
result = transp.remote
proc localAddress*(transp: DatagramTransport): TransportAddress =
## Returns ``transp`` local socket address.
if transp.local.family == AddressFamily.None:
var saddr: Sockaddr_storage
var slen = SockLen(sizeof(saddr))
if getsockname(SocketHandle(transp.fd), cast[ptr SockAddr](addr saddr),
addr slen) != 0:
raiseTransportOsError(osLastError())
fromSAddr(addr saddr, slen, transp.local)
result = transp.local
template setReadError(t, e: untyped) =
(t).state.incl(ReadError)
(t).error = getTransportOsError(e)
@ -318,13 +340,13 @@ when defined(windows):
var saddr: Sockaddr_storage
var slen: SockLen
toSAddr(local, saddr, slen)
if bindAddr(SocketHandle(localSock), cast[ptr SockAddr](addr saddr),
slen) != 0:
let err = osLastError()
if sock == asyncInvalidSocket:
closeSocket(localSock)
raiseTransportOsError(err)
result.local = local
else:
var saddr: Sockaddr_storage
var slen: SockLen
@ -514,7 +536,7 @@ else:
closeSocket(localSock)
raiseTransportOsError(err)
if local.port != Port(0):
if local.family != AddressFamily.None:
var saddr: Sockaddr_storage
var slen: SockLen
toSAddr(local, saddr, slen)
@ -524,7 +546,6 @@ else:
if sock == asyncInvalidSocket:
closeSocket(localSock)
raiseTransportOsError(err)
result.local = local
if remote.port != Port(0):
var saddr: Sockaddr_storage

View File

@ -434,18 +434,19 @@ suite "Datagram Transport test suite":
result += counters[i]
proc testConnReset(): Future[bool] {.async.} =
var ta = initTAddress("127.0.0.1:65000")
var ta = initTAddress("127.0.0.1:0")
var counter = 0
proc clientMark(transp: DatagramTransport,
raddr: TransportAddress): Future[void] {.async.} =
counter = 1
transp.close()
var dgram1 = newDatagramTransport(client1, local = ta)
var localta = dgram1.localAddress()
dgram1.close()
await dgram1.join()
var dgram2 = newDatagramTransport(clientMark)
var data = "MESSAGE"
asyncCheck dgram2.sendTo(ta, data)
asyncCheck dgram2.sendTo(localta, data)
await sleepAsync(2000.milliseconds)
result = (counter == 0)
dgram2.close()