Merge pull request #6047 from euantorano/patch-1
Wait for reads to finish before reading the result
This commit is contained in:
commit
ccbc09fb0b
2 changed files with 56 additions and 4 deletions
|
|
@ -533,15 +533,13 @@ proc recvLineInto*(socket: AsyncSocket, resString: FutureVar[string],
|
||||||
else:
|
else:
|
||||||
var c = ""
|
var c = ""
|
||||||
while true:
|
while true:
|
||||||
let recvFut = recv(socket, 1, flags)
|
c = await recv(socket, 1, flags)
|
||||||
c = recvFut.read()
|
|
||||||
if c.len == 0:
|
if c.len == 0:
|
||||||
resString.mget.setLen(0)
|
resString.mget.setLen(0)
|
||||||
resString.complete()
|
resString.complete()
|
||||||
return
|
return
|
||||||
if c == "\r":
|
if c == "\r":
|
||||||
let recvFut = recv(socket, 1, flags) # Skip \L
|
c = await recv(socket, 1, flags) # Skip \L
|
||||||
c = recvFut.read()
|
|
||||||
assert c == "\L"
|
assert c == "\L"
|
||||||
addNLIfEmpty()
|
addNLIfEmpty()
|
||||||
resString.complete()
|
resString.complete()
|
||||||
|
|
|
||||||
54
tests/async/tasyncRecvLine.nim
Normal file
54
tests/async/tasyncRecvLine.nim
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
discard """
|
||||||
|
file: "tasyncRecvLine.nim"
|
||||||
|
output: '''
|
||||||
|
Hello World
|
||||||
|
Hello World
|
||||||
|
'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncdispatch, asyncnet
|
||||||
|
|
||||||
|
const recvLinePort = Port(6047)
|
||||||
|
|
||||||
|
proc setupTestServer(): AsyncSocket =
|
||||||
|
result = newAsyncSocket()
|
||||||
|
result.setSockOpt(OptReuseAddr, true)
|
||||||
|
result.bindAddr(recvLinePort)
|
||||||
|
result.listen()
|
||||||
|
|
||||||
|
proc testUnbuffered(): Future[void] {.async.} =
|
||||||
|
let serverSock = setupTestServer()
|
||||||
|
let serverAcceptClientFut = serverSock.accept()
|
||||||
|
|
||||||
|
let clientSock = newAsyncSocket(buffered = false)
|
||||||
|
let clientConnectFut = clientSock.connect("localhost", recvLinePort)
|
||||||
|
|
||||||
|
let serverAcceptedClient = await serverAcceptClientFut
|
||||||
|
await clientConnectFut
|
||||||
|
|
||||||
|
await serverAcceptedClient.send("Hello World\c\L")
|
||||||
|
|
||||||
|
echo await clientSock.recvLine()
|
||||||
|
|
||||||
|
clientSock.close()
|
||||||
|
serverSock.close()
|
||||||
|
|
||||||
|
proc testBuffered(): Future[void] {.async.} =
|
||||||
|
let serverSock = setupTestServer()
|
||||||
|
let serverAcceptClientFut = serverSock.accept()
|
||||||
|
|
||||||
|
let clientSock = newAsyncSocket(buffered = true)
|
||||||
|
let clientConnectFut = clientSock.connect("localhost", recvLinePort)
|
||||||
|
|
||||||
|
let serverAcceptedClient = await serverAcceptClientFut
|
||||||
|
await clientConnectFut
|
||||||
|
|
||||||
|
await serverAcceptedClient.send("Hello World\c\L")
|
||||||
|
|
||||||
|
echo await clientSock.recvLine()
|
||||||
|
|
||||||
|
clientSock.close()
|
||||||
|
serverSock.close()
|
||||||
|
|
||||||
|
waitFor testUnbuffered()
|
||||||
|
waitFor testBuffered()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue