📄 tcp_select_server.c
字号:
#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <sys/time.h>#include <sys/select.h>int time_out(int socket_id){ struct timeval time_val; time_val.tv_sec=5; time_val.tv_usec=0; fd_set fd_array; FD_ZERO(&fd_array); FD_SET(socket_id,&fd_array); return select(socket_id+1,&fd_array,NULL,NULL,&time_val);}int main(int argc,char *argv[]){ int lisn_socket,client_socket; pid_t child; char buffer[512]; int read_count=0; int opt=1; int select_return=0; int addr_len=sizeof(struct sockaddr); struct sockaddr_in addr_in,client_addr; memset(buffer,0,512); addr_in.sin_family=AF_INET; addr_in.sin_port=htons(5555); addr_in.sin_addr.s_addr=INADDR_ANY; lisn_socket=socket(AF_INET,SOCK_STREAM,0); setsockopt(lisn_socket,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); if(bind(lisn_socket,(struct sockaddr *)&addr_in,sizeof(struct sockaddr))<0) { perror("bind"); return -1; } listen(lisn_socket,10); while(1) { client_socket=accept(lisn_socket,(struct sockaddr *)&client_addr,&addr_len); child=fork(); if(child==0) { close(lisn_socket); while(1) { select_return=time_out(client_socket); if(select_return>0) { read_count=read(client_socket,buffer,sizeof(buffer)); write(client_socket,buffer,read_count); memset(buffer,0,sizeof(buffer)); } else if(select_return==0) { close(client_socket); printf("client time out!\n"); break; } } exit(0); } close(client_socket); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -