int udp_echo_srv_ioqueue(void) { pj_pool_t *pool; pj_sock_t sock; pj_ioqueue_t *ioqueue; pj_ioqueue_callback callback; int i; pj_thread_t *thread[ECHO_SERVER_MAX_THREADS]; pj_status_t rc; pj_bzero(&callback, sizeof(callback)); callback.on_read_complete = &on_read_complete; callback.on_write_complete = &on_write_complete; pool = pj_pool_create(mem, NULL, 4000, 4000, NULL); if (!pool) return -10; rc = pj_ioqueue_create(pool, 2, &ioqueue); if (rc != PJ_SUCCESS) { app_perror("...pj_ioqueue_create error", rc); return -20; } rc = app_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0, ECHO_SERVER_START_PORT, &sock); if (rc != PJ_SUCCESS) { app_perror("...app_socket error", rc); return -30; } rc = pj_ioqueue_register_sock(pool, ioqueue, sock, NULL, &callback, &key); if (rc != PJ_SUCCESS) { app_perror("...error registering socket", rc); return -40; } rc = pj_atomic_create(pool, 0, &total_bytes); if (rc != PJ_SUCCESS) { app_perror("...error creating atomic variable", rc); return -45; } for (i=0; i<ECHO_SERVER_MAX_THREADS; ++i) { rc = pj_thread_create(pool, NULL, &worker_thread, ioqueue, PJ_THREAD_DEFAULT_STACK_SIZE, 0, &thread[i]); if (rc != PJ_SUCCESS) { app_perror("...create thread error", rc); return -50; } } echo_srv_common_loop(total_bytes); return 0; }
int echo_srv_sync(void) { pj_pool_t *pool; pj_sock_t sock; pj_thread_t *thread[ECHO_SERVER_MAX_THREADS]; pj_status_t rc; int i; pool = pj_pool_create(mem, NULL, 4000, 4000, NULL); if (!pool) return -5; rc = pj_atomic_create(pool, 0, &total_bytes); if (rc != PJ_SUCCESS) { app_perror("...unable to create atomic_var", rc); return -6; } rc = app_socket(pj_AF_INET(), pj_SOCK_DGRAM(),0, ECHO_SERVER_START_PORT, &sock); if (rc != PJ_SUCCESS) { app_perror("...socket error", rc); return -10; } for (i=0; i<ECHO_SERVER_MAX_THREADS; ++i) { rc = pj_thread_create(pool, NULL, &worker_thread, (void*)sock, PJ_THREAD_DEFAULT_STACK_SIZE, 0, &thread[i]); if (rc != PJ_SUCCESS) { app_perror("...unable to create thread", rc); return -20; } } PJ_LOG(3,("", "...UDP echo server running with %d threads at port %d", ECHO_SERVER_MAX_THREADS, ECHO_SERVER_START_PORT)); PJ_LOG(3,("", "...Press Ctrl-C to abort")); echo_srv_common_loop(total_bytes); return 0; }