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

📄 poll.c

📁 linuxFedure4环境下串口编程后台运行状态机
💻 C
字号:
//#include "echo.h"#include <linux/poll.h>#include <netinet/in.h>#include <errno.h>#include <stdlib.h>#define MAXLINE	10#define OPEN_MAX	10intmain( int argc , char * * argv ){		int i , j, maxi , listenfd , connfd , sockfd;		int nready;		ssize_t n;		char line[ MAXLINE ];		int clilen;		struct pollfd client[ OPEN_MAX ];		struct sockaddr_in cliaddr , servaddr;		listenfd = socket( AF_INET , SOCK_STREAM , 0 );		memset( &servaddr , 0 , sizeof( servaddr ) );		servaddr.sin_family = AF_INET;		servaddr.sin_addr.s_addr = htonl( INADDR_ANY );		servaddr.sin_port = htons( 10000 );		bind( listenfd , (struct sockaddr *)&servaddr , sizeof( servaddr ) );		listen( listenfd , 1024 );		client[0].fd = listenfd;		client[0].events = POLLRDNORM;		for( i = 1 ; i < OPEN_MAX ; i ++ )				client[i].fd = -1;		maxi = 0; 		for( ; ; )		{				nready = poll( client , maxi + 1 , 100 );				if( client[0].revents & POLLRDNORM )				{						clilen = sizeof( cliaddr );						connfd = accept( listenfd , (struct sockaddr *)&cliaddr , &clilen );												//write(connfd, "CENTRE|NEW_JOB|1|sword|A|C|CENTRE\0", 255);						for( i = 1 ; i < OPEN_MAX ; i ++ )						{								if( client[i].fd < 0 )								{										client[i].fd = connfd;										break;								}						}						if( i == OPEN_MAX )						{								printf( "Too many clients!\n" );								exit( 1 );						}						client[i].events = POLLRDNORM;						if( i > maxi )								maxi = i;						if( -- nready <= 0 )								continue;				}				for( i = 1 ; i <= maxi ; i ++ )				{						if( ( sockfd = client[i].fd ) < 0 )								continue;						if( client[i].revents & ( POLLRDNORM | POLLERR ) )						{								if( ( n = read( sockfd , line , MAXLINE ) ) < 0 )								{										if( errno == ECONNRESET )										{												close( sockfd );												client[i].fd = -1;										}										else										{												printf( "readline error\n" );												exit( 1 );										}								}								else if( n == 0 )								{										close( sockfd );										client[i].fd = -1;								}								else								{										for( j = 1; j <= maxi; j++ )												if( (sockfd = client[j].fd) > 0 ) write( sockfd , line , n );								}								if( -- nready <= 0 )										break;						}				}		}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -