void mg_socket_if_init(struct mg_iface *iface) { (void) iface; DBG(("%p using select()", iface->mgr)); #if MG_ENABLE_BROADCAST mg_socketpair(iface->mgr->ctl, SOCK_DGRAM); #endif }
int main(int argc, char *argv[]) { struct mg_mgr mgr; if (argc != 3) { fprintf(stderr, "Usage: %s <port> <client|server>\n", argv[0]); exit(EXIT_FAILURE); } else if (strcmp(argv[2], "client") == 0) { sock_t fds[2]; struct mg_connection *ioconn, *server_conn; mg_mgr_init(&mgr, NULL); // Connect to the pubsub server server_conn = mg_connect(&mgr, argv[1], client_handler); if (server_conn == NULL) { fprintf(stderr, "Cannot connect to port %s\n", argv[1]); exit(EXIT_FAILURE); } server_conn->flags |= MG_F_USER_2; // Mark this as a client connection // Create a socketpair and give one end to the thread that reads stdin mg_socketpair(fds, SOCK_STREAM); mg_start_thread(stdin_thread, &fds[1]); // The other end of a pair goes inside the server ioconn = mg_add_sock(&mgr, fds[0], client_handler); ioconn->flags |= MG_F_USER_1; // Mark this so we know this is a stdin ioconn->user_data = server_conn; } else { // Server code path mg_mgr_init(&mgr, NULL); mg_bind(&mgr, argv[1], server_handler); printf("Starting pubsub server on port %s\n", argv[1]); } for (;;) { mg_mgr_poll(&mgr, 1000); } mg_mgr_free(&mgr); return EXIT_SUCCESS; }