⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcp_select_server.c

📁 select函数在linux下的应用
💻 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 + -