void muta_connect(libmuta_processing_callback f, void *priv) { struct sockaddr_storage addr_storage; struct sockaddr *addr = NULL; uint32_t addrlen = 0; memset(&addr_storage, 0, sizeof(addr_storage)); addr = (struct sockaddr *)&addr_storage; addrlen = sizeof(addr_storage); pomp_addr_parse(LIBMUTA_IMAGE_SOCKET, addr, &addrlen); s_app.ctx = pomp_ctx_new(client_event_cb, f); s_app.loop = pomp_ctx_get_loop(s_app.ctx); client_start(addr, addrlen); s_app.stop = 0; s_app.priv = priv; s_app.process = f; while (!s_app.stop) { pomp_loop_wait_and_process(s_app.loop, -1); } if (s_app.ctx != NULL) { pomp_ctx_stop(s_app.ctx); pomp_ctx_destroy(s_app.ctx); } }
int main(int argc, char *argv[]) { struct sockaddr_storage addr_storage; struct sockaddr *addr = NULL; uint32_t addrlen = 0; /* Check arguments */ if (argc != 3 || (strcmp(argv[1], "-s") != 0 && strcmp(argv[1], "-c") != 0)) { usage(argv[0]); exit(EXIT_FAILURE); } /* Client/Server mode */ bool isServer = (strcmp(argv[1], "-s") == 0); /* Create application BEFORE parsing address * (required for WIN32 as it is the lib that initialize winsock API) */ App app(isServer); /* Parse address */ memset(&addr_storage, 0, sizeof(addr_storage)); addr = reinterpret_cast<struct sockaddr *>(&addr_storage); addrlen = sizeof(addr_storage); if (pomp_addr_parse(argv[2], addr, &addrlen) < 0) { diag("Failed to parse address : %s", argv[2]); usage(argv[0]); exit(EXIT_FAILURE); } /* Run application */ return app.run(addr, addrlen); }