Очень полезно знать, как работает API-интерфейс сокетов, поскольку он часто экспортируется с очень незначительными изменениями в языках более высокого уровня.
Тем не менее, вы можете использовать поддержку цикла событий, предоставляемую GLib , и использовать соответствующую сетевую библиотеку GNet .
Вот как использовать GNet, чтобы открыть сокет на порте 4000, а затем закрыть все подключения к нему. Здесь есть немного волшебства, поскольку сервер регистрируется в основном контексте по умолчанию как часть своего создания.
#include <glib.h>
#include <gnet.h>
void client_connect(GServer G_GNUC_UNUSED *server, GConn *conn, gpointer G_GNUC_UNUSED user_data){
g_print("Connection from %s\n", conn->hostname);
gnet_conn_disconnect(conn);
gnet_conn_unref(conn); conn = NULL;
}
int main(void){
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
GServer *server;
gnet_init();
server = gnet_server_new(NULL, 4000, client_connect, NULL);
g_main_loop_run(loop);
g_main_loop_unref(loop); loop = NULL;
return 0;
}