static void handle_fd_events (DskFileDescriptor fd, unsigned events, void *callback_data) { DskClientStream *stream = callback_data; DSK_UNUSED (fd); if ((events & DSK_EVENT_READABLE) != 0 && stream->base_instance.source != NULL) dsk_hook_notify (&stream->base_instance.source->readable_hook); if ((events & DSK_EVENT_WRITABLE) != 0 && stream->base_instance.sink != NULL) dsk_hook_notify (&stream->base_instance.sink->writable_hook); }
static dsk_boolean handle_underlying_writable (DskOctetSink *underlying, DskSslStream *stream) { dsk_assert (stream->underlying_sink == underlying); if (stream->handshaking) { DskError *error = NULL; if (!do_handshake (stream, &error)) { dsk_octet_stream_set_error (DSK_OCTET_STREAM (stream), error); dsk_error_unref (error); return DSK_FALSE; } return DSK_TRUE; } else if (stream->write_needed_to_read) dsk_hook_notify (&stream->base_instance.source->readable_hook); else dsk_hook_notify (&stream->base_instance.sink->writable_hook); return DSK_TRUE; }
void dsk_client_stream_disconnect (DskClientStream *stream) { if (!stream->is_connected) return; /* close fd */ dsk_main_close_fd (stream->fd); stream->is_connected = DSK_FALSE; stream->fd = -1; /* emit disconnect hook */ dsk_hook_notify (&stream->disconnect_hook); /* maybe plan reconnect */ maybe_set_autoreconnect_timer (stream); }