Receive data asynchronously over a connection (Socket, Context or Stream).
recv_aio(
con,
mode = c("serial", "character", "complex", "double", "integer", "logical", "numeric",
"raw"),
timeout = -2L,
keep.raw = TRUE,
...,
n = 65536L
)# S3 method for nanoSocket
recv_aio(
con,
mode = c("serial", "character", "complex", "double", "integer", "logical", "numeric",
"raw"),
timeout = -2L,
keep.raw = TRUE,
...
)
# S3 method for nanoContext
recv_aio(
con,
mode = c("serial", "character", "complex", "double", "integer", "logical", "numeric",
"raw"),
timeout = -2L,
keep.raw = TRUE,
...
)
# S3 method for nanoStream
recv_aio(
con,
mode = c("character", "complex", "double", "integer", "logical", "numeric", "raw"),
timeout = -2L,
keep.raw = TRUE,
n = 65536L,
...
)
a Socket, Context or Stream.
[default 'serial'] mode of vector to be received - one of 'serial', 'character', 'complex', 'double', 'integer', 'logical', 'numeric', or 'raw'. The default 'serial' means a serialised R object, for the other modes, the raw vector received will be converted into the respective mode. For Streams, 'serial' is not an option and the default is 'character'.
(optional) integer value in milliseconds. If unspecified, the default of -2L uses a socket-specific default, which is usually the same as no timeout.
[default TRUE] logical flag whether to keep the received raw vector (useful for verification e.g. via hashing). If FALSE, will return the converted data only.
currently unused.
[default 65536L] applicable to Streams only, the maximum number of bytes to receive. Can be an over-estimate, but note that a buffer of this size is reserved.
A 'recvAio' (object of class 'recvAio').
Async receive is always non-blocking and returns a 'recvAio' immediately.
For a 'recvAio', the received message is available at $data
, and
the raw message at $raw
(if kept). An 'unresolved' logical NA is
returned if the async operation is yet to complete.
To wait for the async operation to complete and retrieve the received
message, use call_aio
on the returned 'recvAio' object.
Alternatively, to stop the async operation, use stop_aio
.
In case of an error, an integer 'errorValue' is returned (to be
distiguishable from an integer message value). This can be verified using
is_error_value
.
If the raw data was successfully received but an error occurred in
unserialisation or data conversion (for example if the incorrect mode was
specified), the received raw vector will be stored at $data
to
allow for the data to be recovered.
# NOT RUN {
s1 <- socket("pair", listen = "inproc://nanonext")
s2 <- socket("pair", dial = "inproc://nanonext")
res <- send_aio(s1, data.frame(a = 1, b = 2), timeout = 100)
msg <- recv_aio(s2, timeout = 100, keep.raw = FALSE)
msg
msg$data
res <- send_aio(s1, c(1.1, 2.2, 3.3), mode = "raw", timeout = 100)
msg <- recv_aio(s2, mode = "double", timeout = 100)
msg
msg$raw
msg$data
res <- send_aio(s1, "example message", mode = "raw", timeout = 100)
msg <- recv_aio(s2, mode = "character", timeout = 100)
call_aio(msg)
msg$raw
msg$data
close(s1)
close(s2)
# }
Run the code above in your browser using DataLab