Make waitForData not assert fail on close fix #110

This commit is contained in:
WebFreak001 2018-12-20 02:10:40 +01:00
parent 26b6190743
commit c8ab6ae2f8
2 changed files with 46 additions and 1 deletions

View file

@ -569,7 +569,13 @@ mixin(tracer);
alias waiter = Waitable!(IOCallback,
cb => eventDriver.sockets.read(m_socket, m_context.readBuffer.peekDst(), mode, cb),
(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);

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);
}