On 7/31/18 7:49 AM, Russel Winder wrote:
On Tue, 2018-07-31 at 13:10 +0200, Daniel Kozak via Digitalmars-d-learn wrote:
On Fri, Jul 27, 2018 at 9:30 PM Steven Schveighoffer via
Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:
Maybe IOMode.immediate or .once?
https://vibed.org/api/eventcore.driver/IOMode
Oh, it looks like you specified once. Hm... that seems to me like it
should work.
Looks like IOMode is ignored:
https://github.com/vibe-d/vibe.d/blob/a9589d955f10bd076a67d47ace0c78cfd3aa
8246/core/vibe/core/drivers/libevent2_tcp.d#L285
So, no, there isn't a correct way to do this, it's unimplemented.
It is implemented with vibe-core driver which should be default now
https://github.com/vibe-d/vibe-core/blob/fae7d3e93d00d9636632aa0acf9ebc19ed9
f4a34/source/vibe/core/net.d#L665
Sadly as of vibe.d 0.8.4 the behaviour of read(buffer, IOMode) is to either
fill the buffer completely or throw an exception. On the forum, Sönke has
agreed it really does seem like a bug in the implementation.
I found a workaround to the problem for my entry to CVu Code Critique 112,
which actually is nicer code to the one that highlighted the problem – except
that it relies on a property that has been marked deprecated.
Deadline for entries is tomorrow, so I am not now in a position to change the
article, it has to appear as it is now. Obviously once published, people are
most welcome to write an article for CVu reporting how naïve/crap my code is,
and providing better answers.
Hm.. it appears that there is a timeout exception thrown if there is no
data within a certain time period. Are you getting that instead?
I'm not completely familiar with the mechanisms here, but it does appear
to obey the other modes properly in this iteration of the library.
-Steve