📄 server_pthread.c
字号:
#include <sys/types.h> /* basic system data types */#include <sys/socket.h> /* basic socket definitions */#include <sys/time.h> /* timeval{} for select() */#include <time.h> /* timespec{} for pselect() */#include <netinet/in.h> /* sockaddr_in{} and other Internet defns */#include <arpa/inet.h> /* inet(3) functions */#include <errno.h>#include <fcntl.h> /* for nonblocking */#include <netdb.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/stat.h> /* for S_xxx file mode constants */#include <sys/uio.h> /* for iovec{} and readv/writev */#include <unistd.h>#include <sys/wait.h># include <sys/select.h> /* for convenience */# include <poll.h> /* for convenience */# include <strings.h> /* for convenience */# include <sys/ioctl.h># include <pthread.h>int read_and_send(int sockfd){#if 1 write(sockfd,"1234",4); return 0;#endif}void *doit(void *arg){ printf("pid=%d,pthreadid=%d\n",getpid(),pthread_self()); pthread_detach(pthread_self()); read_and_send((int) arg); close((int) arg); return(NULL);}voidsig_int(int signo){ exit(0);}#define SA struct sockaddr#define LISTENQ 1024intmain(int argc, char **argv){ int listenfd, connfd; pthread_t tid; socklen_t clilen; struct sockaddr_in servaddr, cliaddr; int serverport=0; printf("hehe,begin ok\n"); if (argc == 1) serverport=8888; else if (argc == 2) serverport=atoi(argv[1]); else{ printf("usage: server_pthread <port#>\n"); exit(0); } listenfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(serverport); /* daytime server */ bind(listenfd, (SA *) &servaddr, sizeof(servaddr)); listen(listenfd, LISTENQ); signal(SIGINT, sig_int); for ( ; ; ) { clilen = sizeof(cliaddr); connfd = accept(listenfd, (SA *)&cliaddr, &clilen); pthread_create(&tid, NULL, &doit, (void *) connfd); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -