return sockfd;
}
+static void command_close_socket(rad_listen_t *this)
+{
+ this->status = RAD_LISTEN_STATUS_CLOSED;
+
+ /*
+ * This removes the socket from the event fd, so no one
+ * will be calling us any more.
+ */
+ event_new_fd(this);
+
+ listen_free(&this);
+}
+
static ssize_t cprintf(rad_listen_t *listener, const char *fmt, ...)
{
if (listener->status == RAD_LISTEN_STATUS_CLOSED) return 0;
len = write(listener->fd, buffer, len);
- if (len < 0) {
- listener->status = RAD_LISTEN_STATUS_CLOSED;
- event_new_fd(listener);
- }
+ if (len <= 0) command_close_socket(listener);
/*
* FIXME: Keep writing until done?
*/
if ((co->offset == 0) && (co->buffer[0] == 0x04)) {
close_socket:
- listener->status = RAD_LISTEN_STATUS_CLOSED;
- event_new_fd(listener);
+ command_close_socket(listener);
return 0;
}