diff options
Diffstat (limited to 'tests/async/tnewasyncudp.nim')
-rw-r--r-- | tests/async/tnewasyncudp.nim | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/tests/async/tnewasyncudp.nim b/tests/async/tnewasyncudp.nim index 7025fa20d..68de796a0 100644 --- a/tests/async/tnewasyncudp.nim +++ b/tests/async/tnewasyncudp.nim @@ -1,5 +1,4 @@ discard """ - file: "tnewasyncudp.nim" output: "5000" """ import asyncdispatch, nativesockets, net, strutils, os @@ -29,31 +28,40 @@ proc saveReceivedPort(port: int) = proc prepareAddress(intaddr: uint32, intport: uint16): ptr Sockaddr_in = result = cast[ptr Sockaddr_in](alloc0(sizeof(Sockaddr_in))) - when defined(windows): - result.sin_family = toInt(nativesockets.AF_INET).int16 - else: - result.sin_family = toInt(nativesockets.AF_INET) - result.sin_port = htons(intport) - result.sin_addr.s_addr = htonl(intaddr) + result.sin_family = typeof(result.sin_family)(toInt(nativesockets.AF_INET)) + result.sin_port = nativesockets.htons(intport) + result.sin_addr.s_addr = nativesockets.htonl(intaddr) proc launchSwarm(name: ptr SockAddr) {.async.} = var i = 0 var k = 0 + var buffer: array[16384, char] + var slen = sizeof(Sockaddr_in).SockLen + var saddr = Sockaddr_in() while i < swarmSize: - var peeraddr = prepareAddress(INADDR_ANY, 0) - var sock = newAsyncNativeSocket(nativesockets.AF_INET, - nativesockets.SOCK_DGRAM, - Protocol.IPPROTO_UDP) + var peeraddr = prepareAddress(INADDR_LOOPBACK, 0) + var sock = createAsyncNativeSocket(nativesockets.AF_INET, + nativesockets.SOCK_DGRAM, + Protocol.IPPROTO_UDP) if bindAddr(sock.SocketHandle, cast[ptr SockAddr](peeraddr), sizeof(Sockaddr_in).Socklen) < 0'i32: raiseOSError(osLastError()) let sockport = getSockName(sock.SocketHandle).int k = 0 while k < messagesToSend: + zeroMem(addr(buffer[0]), 16384) + zeroMem(cast[pointer](addr(saddr)), sizeof(Sockaddr_in)) var message = "Message " & $(i * messagesToSend + k) await sendTo(sock, addr message[0], len(message), name, sizeof(Sockaddr_in).SockLen) - saveSendingPort(sockport) + var size = await recvFromInto(sock, cast[pointer](addr buffer[0]), + 16384, cast[ptr SockAddr](addr saddr), + addr slen) + size = 0 + var grammString = $cast[cstring](addr buffer) + if grammString == message: + saveSendingPort(sockport) + inc(recvCount) inc(k) closeSocket(sock) inc(i) @@ -72,25 +80,26 @@ proc readMessages(server: AsyncFD) {.async.} = 16384, cast[ptr SockAddr](addr(saddr)), addr(slen)) size = 0 - var grammString = $buffer - if grammString.startswith("Message ") and - saddr.sin_addr.s_addr == 0x100007F: + var grammString = $cast[cstring](addr buffer) + if grammString.startsWith("Message ") and + saddr.sin_addr.s_addr == nativesockets.ntohl(INADDR_LOOPBACK.uint32): + await sendTo(server, addr grammString[0], len(grammString), + cast[ptr SockAddr](addr saddr), slen) inc(msgCount) - saveReceivedPort(ntohs(saddr.sin_port).int) - inc(recvCount) + saveReceivedPort(nativesockets.ntohs(saddr.sin_port).int) inc(i) proc createServer() {.async.} = - var name = prepareAddress(INADDR_ANY, serverPort) - var server = newAsyncNativeSocket(nativesockets.AF_INET, - nativesockets.SOCK_DGRAM, - Protocol.IPPROTO_UDP) + var name = prepareAddress(INADDR_LOOPBACK, serverPort) + var server = createAsyncNativeSocket(nativesockets.AF_INET, + nativesockets.SOCK_DGRAM, + Protocol.IPPROTO_UDP) if bindAddr(server.SocketHandle, cast[ptr SockAddr](name), sizeof(Sockaddr_in).Socklen) < 0'i32: raiseOSError(osLastError()) asyncCheck readMessages(server) -var name = prepareAddress(0x7F000001, serverPort) # 127.0.0.1 +var name = prepareAddress(INADDR_LOOPBACK, serverPort) # 127.0.0.1 asyncCheck createServer() asyncCheck launchSwarm(cast[ptr SockAddr](name)) while true: |