Merge pull request #111 from WebFreak001/fix-110

Make waitForData not assert fail on close fix #110
This commit is contained in:
Sönke Ludwig 2018-12-20 10:14:08 +01:00 committed by GitHub
commit 0d3338a16b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 2 deletions

View file

@ -569,12 +569,18 @@ mixin(tracer);
alias waiter = Waitable!(IOCallback, alias waiter = Waitable!(IOCallback,
cb => eventDriver.sockets.read(m_socket, m_context.readBuffer.peekDst(), mode, cb), cb => eventDriver.sockets.read(m_socket, m_context.readBuffer.peekDst(), mode, cb),
(cb) { cancelled = true; eventDriver.sockets.cancelRead(m_socket); }, (cb) { cancelled = true; eventDriver.sockets.cancelRead(m_socket); },
(sock, st, nb) { assert(sock == m_socket); status = st; nbytes = nb; } (sock, st, nb) {
if (m_socket == StreamSocketFD.invalid) {
cancelled = true;
return;
}
assert(sock == m_socket); status = st; nbytes = nb;
}
); );
asyncAwaitAny!(true, waiter)(timeout); asyncAwaitAny!(true, waiter)(timeout);
if (cancelled) return false; if (cancelled || !m_context) return false;
logTrace("Socket %s, read %s bytes: %s", m_socket, nbytes, status); logTrace("Socket %s, read %s bytes: %s", m_socket, nbytes, status);

View file

@ -0,0 +1,39 @@
/+ dub.sdl:
name "test"
dependency "vibe-core" path=".."
+/
module test;
import core.time;
import vibe.core.core;
import vibe.core.net;
ushort port;
void main()
{
runTask(&server);
runTask(&client);
runEventLoop();
}
void server()
{
auto listener = listenTCP(0, (conn) @safe nothrow {
try { sleep(200.msecs); } catch (Exception) {}
});
port = listener[0].bindAddress.port;
}
void client()
{
sleep(100.msecs);
auto tcp = connectTCP("127.0.0.1", port);
runTask({
sleep(10.msecs);
tcp.close();
});
assert(!tcp.waitForData());
exitEventLoop(true);
}