| | |
| | | #include <getopt.h> |
| | | #include <pthread.h> |
| | | |
| | | #define MSG_STR "Hello LingYun IoT Studio Client\n" |
| | | |
| | | typedef void *(THREAD_BODY) (void *thread_arg); |
| | | |
| | | void *thread_worker(void *ctx); |
| | | int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg); |
| | | |
| | | |
| | | void print_usage(char *progname) |
| | | { |
| | |
| | | |
| | | printf("Accept new client[%s:%d] successfully\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port)); |
| | | |
| | | thread_start(&tid, thread_worker, &clifd); |
| | | /* ???? Can not pass &clifd to child process, U can think about the reason ???? */ |
| | | thread_start(&tid, thread_worker, (void *)clifd); |
| | | } |
| | | |
| | | |
| | |
| | | pthread_exit(NULL); |
| | | } |
| | | |
| | | clifd = *(int *)ctx; |
| | | clifd = (int)ctx; |
| | | |
| | | printf("Child thread start to commuicate with socket client...\n"); |
| | | |
| | |
| | | rv=read(clifd, buf, sizeof(buf)); |
| | | if( rv < 0) |
| | | { |
| | | printf("Read data from client sockfd[%d] failure: %s\n", clifd, strerror(errno)); |
| | | printf("Read data from client sockfd[%d] failure: %s and thread will exit\n", clifd, strerror(errno)); |
| | | close(clifd); |
| | | pthread_exit(NULL); |
| | | } |
| | | else if( rv == 0) |
| | | { |
| | | printf("Socket[%d] get disconnected\n", clifd); |
| | | printf("Socket[%d] get disconnected and thread will exit.\n", clifd); |
| | | close(clifd); |
| | | pthread_exit(NULL); |
| | | } |
| | |
| | | rv=write(clifd, buf, rv); |
| | | if(rv < 0) |
| | | { |
| | | printf("Write to client by sockfd[%d] failure: %s\n", clifd, strerror(errno)); |
| | | printf("Write to client by sockfd[%d] failure: %s and thread will exit\n", clifd, strerror(errno)); |
| | | close(clifd); |
| | | pthread_exit(NULL); |
| | | } |