[R-pkg-devel] socketConnection, delay when reading from
Ben Engbers
Ben@Engber@ @end|ng |rom Be-Log|c@|@n|
Wed Dec 8 14:17:16 CET 2021
Op 08-12-2021 om 12:40 schreef Tomas Kalibera:
> On 12/8/21 12:20 PM, Ben Engbers wrote:
>> Op 07-12-2021 om 23:49 schreef Ben Engbers:
>> The new code, which now uses a non-blocking socket, takes less than 4
>> seconds to execute the 53 tests. Compared to the 120 seconds when
>> using a blocking socket, this was worth the effort.
>
> Ok, this confirms there is a race condition, but the next step should be
> removing it, so that it works reliably. Actually, one way to test that
> such programs are race-free is to actually on purpose insert sleeps at
> various locations - the programs then should still work.
>
> I am not able to give more specific advice based on the code snippet you
> sent yesterday, but in principle, you can use socketSelect() to wait for
> the connection to become ready to be read from. In either case, there
> needs to be some way to tell whether the received data is complete.
> Either you know the length, or there is some special mark in the data,
> there has to be something.
writeBin(auth, private$conn)
Sys.sleep(.1)
Accepted <- readBin(conn, what = "raw", n = 1) == 0
I checked in the debugger that auth has the correct length. And
readBin(conn, what = "raw", n = 1) should return exactly 1 byte (either
0x00 or 0x01.
You say that socketSelect() can be used to wait for the connection to
become ready.
How? The only option I see is a "no-delay". Should I set this to FALSE?
I tried adding 'options = getOption(c("no-delay = <value>"))' when
creating the socketConnection. In the tesfile (see below) value TRUE or
FALSE were both accepted. In the package, createSocket still failed.
> If you need more help from people on the list, it might be better to
> send a small, but full complete example, so also with a server, so that
> it is something people could run and reproduce.
The server can be downloaded from https://basex.org/download/. After
unzipping it can be started with 'basexserver &'.
I have attached a testfile.
Ben
>
> Best
> Tomas
More information about the R-package-devel
mailing list