diff --git a/src/common/remoteio.h b/src/common/remoteio.h --- a/src/common/remoteio.h +++ b/src/common/remoteio.h @@ -49,12 +49,25 @@ struct remoteio; * @param generic_data a pointer that is stored in remoteio's struct remoteio_opts which isn't client-specific * @param buf a pointer to the buffer containing data waiting to be processed * @param len the size of buf that may be accessed - * @param data the pointer passed to remoteio_open. _NOT_ the data just received on the socket. + * @param data the pointer passed to remoteio_open(). _NOT_ the data just received on the socket. * @return the number of bytes that the function accepted and thus should be removed from the rem handle. */ typedef size_t(*remoteio_read_handle_func_t)(struct remoteio *rem, void *generic_data, void *buf, size_t len, void *data); /** + * asynchronous close handler which is called whenever remoteio_close() is called. + * + * As reading is now event-oriented and as libremoteio may itself call + * remoteio_close(), you need a way to be informed that a socket is + * being closed. This is particularly important if you have to clean + * up your read_handler_data. + * + * @param generic_data a pointer set by a call to remoteio_generic_data_set(). + * @param data the same pointer passed to remoteio_open(). + */ +typedef void (*remoteio_close_handle_func_t)(void *generic_data, void *data); + +/** * Determines the value of generic_data which is passed to * remoteio_read_handle_func_t * @@ -76,6 +89,7 @@ int remoteio_open_server(struct remoteio struct remoteio_opts *opts, remoteio_read_handle_func_t read_handler, void *read_handler_data, + remoteio_close_handle_func_t close_handler, const char *servername); /** @@ -92,6 +106,7 @@ int remoteio_open_socket(struct remoteio struct remoteio_opts *opts, remoteio_read_handle_func_t read_handler, void *read_handler_data, + remoteio_close_handle_func_t close_handler, int fd); /**