@@ -428,9 +428,10 @@ void hio_write_cb(hio_t* io, const void* buf, int len) {
void hio_close_cb(hio_t* io) {
io->connected = 0;
io->closed = 1;
- if (io->close_cb) {
+ hclose_cb close_cb = io->close_cb;
+ if (close_cb) {
// printd("close_cb------\n");
- io->close_cb(io);
+ close_cb(io);
// printd("close_cb======\n");
}
@@ -180,6 +180,10 @@ public:
int close(bool async = false) {
if (isClosed()) return -1;
status = CLOSED;
+ // NOTE: avoid to trigger on_close if not set onclose
+ if (onclose == NULL && hio_getcb_close(io_) == on_close) {
+ hio_setcb_close(io_, NULL);
+ }
return async ? hio_close_async(io_) : hio_close(io_);