- 论坛徽章:
- 0
|
在程序执行的时候按Ctrl+C,产生了core。\r\n请教是怎么会事?应该怎么处理\r\n#include <stdio.h>;\r\n#include <errno.h>;\r\n#include <sys/types.h>;\r\n#include <sys/socket.h>;\r\n#include <sys/signal.h>;\r\n#include <sys/select.h>;\r\n#include <sys/sem.h>;\r\n#include <netinet/in.h>;\r\n#include <pthread.h>;\r\n\r\npthread_mutex_t mutex;\r\npthread_cond_t cond;\r\npthread_t tid, tid2, tid3;\r\n\r\nvoid *thread_start(void *arg)\r\n{\r\n\r\n while(1)\r\n {\r\n pthread_mutex_lock(&mutex);\r\n\r\n if( pthread_cond_wait(&cond,&mutex) == EINTR )\r\n {\r\n printf(\"eintr...............\\n\" ;\r\n }\r\n pthread_mutex_unlock(&mutex);\r\n }\r\n pthread_exit(0);\r\n}\r\n\r\nvoid killHandle(int signo)\r\n{\r\n printf(\"get here.\\n\" ;\r\n pthread_mutex_destroy(&mutex);\r\n pthread_cond_destroy(&cond);\r\n exit(-2);\r\n}\r\nint createthread(void)\r\n{\r\n\r\n pthread_mutex_init(&mutex,NULL);\r\n pthread_cond_init(&cond, NULL);\r\n \r\n pthread_create(&tid, NULL, thread_start, NULL);\r\n \r\n pthread_create(&tid2, NULL, thread_start, NULL);\r\n pthread_create(&tid3, NULL, thread_start, NULL);\r\n \r\n}\r\nint main(void)\r\n{\r\n int sockfd = -1;\r\n int ret = 0;\r\n int listenfd = 0;\r\n struct sockaddr_in server_addr;\r\n \r\n \r\n signal(SIGTERM, killHandle);\r\n signal(SIGINT, killHandle);\r\n signal(SIGPIPE, killHandle); \r\n \r\n createthread();\r\n \r\n sockfd = socket(AF_INET, SOCK_STREAM, 0 );\r\n if( sockfd == -1 )\r\n {\r\n printf(\"getSocket:socket create error.\\n\" ;\r\n return -1;\r\n }\r\n \r\n server_addr.sin_family = AF_INET;\r\n server_addr.sin_port = htons(50001);\r\n server_addr.sin_addr.s_addr = INADDR_ANY; \r\n bzero(&(server_addr.sin_zero), ;\r\n\r\n ret = bind(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));\r\n if( ret == -1 )\r\n {\r\n printf(\"getSocket:socket bind error.\\n\" ;\r\n return -1;\r\n }\r\n listenfd = listen(sockfd, 120);\r\n \r\n\r\n for( ;; )\r\n {\r\n printf(\"main:get here 1\\n\" ; \r\n ret = select(sockfd+1, NULL, NULL, NULL, NULL);\r\n if( ret == EINTR )\r\n {\r\n printf(\"main: eintr\\n\" ;\r\n return 0;\r\n }\r\n printf(\"main:get here 2\\n\" ; \r\n } \r\n return 0;\r\n} |
|