user_close() spio_t_error_code
user_close(
void **puser_data,
spio_t_bits close_options
);
This is the prototype for one of the methods of user defined streams. It is used when SICStus wants to close one or both directions of a user defined stream.
SP_create_stream().
On successful return, if the stream has been closed and any resources
freed, then *puser_data should be set to NULL.
If user_close fails, it can still set *puser_data to
NULL to signify that the stream is no longer usable.
SPIO_DEVICE_CLOSE_OPTION_READSPIO_DEVICE_CLOSE_OPTION_WRITESPIO_DEVICE_CLOSE_OPTION_FORCEuser_close returned an error.
Note that a bidirectional stream should only close the directions
specified by the close_options. Also note that
user_close for a bidirectional stream may be called several
times and that the same direction flag, e.g.
SPIO_DEVICE_CLOSE_OPTION_READ may be specified more than once,
even if that direction has already been closed successfully.
Once a call to user_close has set *puser_data to
NULL, none of the device methods will be called
again. Note that a *puser_data may be set to NULL even
when a failure code is returned. This is useful if the failure is
unrecoverable.
There is no option to specify non-blocking close, it is expected that
user_close will finish quickly. To make this more likely,
user_flush_output is called before non-forcibly closing an
output stream.
On success, return SPIO_S_NOERR or some other success code and
set *puser_data if and only if the user data and any other
resources have been freed.
On failure, return a SPIO error code. Error codes with special meaning
for user_close:
SPIO_E_END_OF_FILEOther error codes may also be returned.
Should close one or all directions depending on the
close_options. If all directions have been closed, the user
data should be deallocated and *puser_data set to
NULL.
cpg-ref-SP_create_stream. Defining a New Stream.