void* func_msg(void* arg) { struct thread_info* args = arg; // struct sockaddr_in client; int sock = args->sock; int read_n, errcnt = 0; ftp_rqt request; // printf("in thread\n"); // fprintf(stderr, "sock: %d\n", sock); while (true) { memset(&request, 0, RQT_LEN); read_n = recv(sock, (char*)&request, RQT_LEN, 0); if (read_n < 0) { errcnt ++; if (errcnt > 10) break ; continue ; } if (read_n == 0) { fprintf(stderr, "quit"); break ; } // printf("msg: %d; read_n: %d\n", request.type, read_n); if (request.type == CMD_CLOSE) break; else if (request.type == CMD_CD) do_chdir(&request, sock); else if (request.type == CMD_MKDIR) do_mkdir(&request, sock); else if (request.type == CMD_RMDIR) do_rmdir(&request, sock); else if (request.type == CMD_LS) do_lsdir(&request, sock); else if (request.type == CMD_GET) { do_get(&request, sock); break; } else if (request.type == CMD_PUT) { printf("put\n"); do_put(&request, sock); break; } // send(sock, CONFIRM, strlen(CONFIRM)+1, 0); } thread_end(args); }
static void thread_init( kz_thread* thp ) { thp->init.func(thp->init.argc, thp->init.argv); thread_end(); }
/* スレッドのスタート・アップ */ static void thread_init(kz_thread *thp) { /* スレッドのメイン関数を呼び出す */ thp->init.func(thp->init.argc, thp->init.argv); thread_end(); }