static gboolean control_socket_accept(gpointer user_data) { gint conn_socket; GSockAddr *peer_addr; GIOStatus status; GIOChannel *channel; if (control_socket == -1) return FALSE; status = g_accept(control_socket, &conn_socket, &peer_addr); if (status != G_IO_STATUS_NORMAL) { msg_error("Error accepting control socket connection", evt_tag_errno("error", errno), NULL); goto error; } g_sockaddr_unref(peer_addr); channel = g_io_channel_unix_new(conn_socket); g_io_channel_set_encoding(channel, NULL, NULL); g_io_channel_set_close_on_unref(channel, TRUE); g_io_add_watch(channel, G_IO_IN, control_channel_input, NULL); g_io_channel_unref(channel); error: return TRUE; }
static void afsocket_sd_accept(gpointer s) { AFSocketSourceDriver *self = (AFSocketSourceDriver *) s; GSockAddr *peer_addr; gchar buf1[256], buf2[256]; gint new_fd; gboolean res; int accepts = 0; while (accepts < MAX_ACCEPTS_AT_A_TIME) { GIOStatus status; status = g_accept(self->fd, &new_fd, &peer_addr); if (status == G_IO_STATUS_AGAIN) { /* no more connections to accept */ break; } else if (status != G_IO_STATUS_NORMAL) { msg_error("Error accepting new connection", evt_tag_errno(EVT_TAG_OSERROR, errno), NULL); return; } g_fd_set_nonblock(new_fd, TRUE); g_fd_set_cloexec(new_fd, TRUE); res = afsocket_sd_process_connection(self, peer_addr, self->bind_addr, new_fd); if (res) { if (peer_addr->sa.sa_family != AF_UNIX) msg_notice("Syslog connection accepted", evt_tag_int("fd", new_fd), evt_tag_str("client", g_sockaddr_format(peer_addr, buf1, sizeof(buf1), GSA_FULL)), evt_tag_str("local", g_sockaddr_format(self->bind_addr, buf2, sizeof(buf2), GSA_FULL)), NULL); else msg_verbose("Syslog connection accepted", evt_tag_int("fd", new_fd), evt_tag_str("client", g_sockaddr_format(peer_addr, buf1, sizeof(buf1), GSA_FULL)), evt_tag_str("local", g_sockaddr_format(self->bind_addr, buf2, sizeof(buf2), GSA_FULL)), NULL); } else { close(new_fd); } g_sockaddr_unref(peer_addr); accepts++; } return; }
static void control_socket_accept(gpointer user_data) { gint conn_socket; GSockAddr *peer_addr; GIOStatus status; if (control_socket == -1) return; status = g_accept(control_socket, &conn_socket, &peer_addr); if (status != G_IO_STATUS_NORMAL) { msg_error("Error accepting control socket connection", evt_tag_errno("error", errno), NULL); goto error; } /* NOTE: the connection will free itself if the peer terminates */ control_connection_new(conn_socket); g_sockaddr_unref(peer_addr); error: ; }
static void control_socket_accept(void *cookie) { ControlServerUnix *self = (ControlServerUnix *)cookie; gint conn_socket; GSockAddr *peer_addr; GIOStatus status; if (self->control_socket == -1) return; status = g_accept(self->control_socket, &conn_socket, &peer_addr); if (status != G_IO_STATUS_NORMAL) { msg_error("Error accepting control socket connection", evt_tag_errno("error", errno)); goto error; } /* NOTE: the connection will free itself if the peer terminates */ control_connection_new(&self->super, conn_socket); g_sockaddr_unref(peer_addr); error: ; }