亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? epoll_t.cc

?? 介紹epoll
?? CC
字號:
#include <iostream>
#include <sys/socket.h>
#include <sys/epoll.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

#define MAXLINE 10
#define OPEN_MAX 100
#define LISTENQ 20
#define SERV_PORT 5555
#define INFTIM 1000

void setnonblocking(int sock)
{
	int opts;
	opts = fcntl(sock, F_GETFL);
	if (opts < 0)
	{
		perror("fcntl(sock, GETFL)");
		exit(1);
	}
	opts = opts|O_NONBLOCK;
	if (fcntl(sock, F_SETFL, opts) < 0)
	{
		perror("fcntl(sock, SETFL, opts)");
		exit(1);
	}
}

// 發(fā)送數(shù)據(jù)
ssize_t socket_send(int sockfd, const char* buffer, size_t buflen)
{
	ssize_t tmp;
	size_t total = buflen;
	const char *p = buffer;

	while(1)
	{
		tmp = send(sockfd, p, total, 0);
		if(tmp < 0)
		{
			// 當(dāng)send收到信號時,可以繼續(xù)寫,但這里返回-1.
			if(errno == EINTR)
			{
				return -1;
			}

			// 當(dāng)socket是非阻塞時,如返回此錯誤,表示寫緩沖隊列已滿,
			// 在這里做延時后再重試.
			if(errno == EAGAIN)
			{
				usleep(1000);
				continue;
			}

			return -1;
		}

		if((size_t)tmp == total)
		{
			return buflen;
		}

		total -= tmp;
		p += tmp;
	}

	return tmp;
}

int main()
{
	int i, maxi, listenfd, connfd, sockfd, epfd, nfds;
	ssize_t rs, n = 0;
	char line[MAXLINE];
	int l_sinSize = 0;
	l_sinSize = sizeof(struct sockaddr);

	// 聲明epoll_event結(jié)構(gòu)體的變量,ev用于注冊事件,數(shù)組用于回傳要處理的事件
	struct epoll_event ev, events[20];
	// 生成用于處理accept的epoll專用的文件描述符
	epfd = epoll_create(256);

	struct sockaddr_in clientaddr;
	struct sockaddr_in serveraddr;
	listenfd = socket(AF_INET, SOCK_STREAM, 0);

	// 把socket設(shè)置為非阻塞方式
	setnonblocking(listenfd);

	// 設(shè)置與要處理的事件相關(guān)的文件描述符
	ev.data.fd = listenfd;
	// 設(shè)置要處理的事件類型
	ev.events = EPOLLIN|EPOLLET;
	// 注冊epoll事件
	epoll_ctl(epfd, EPOLL_CTL_ADD, listenfd, &ev);


	bzero(&serveraddr, sizeof(struct sockaddr_in));
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
	serveraddr.sin_port = htons(SERV_PORT);
	bind(listenfd, (struct sockaddr *)(&serveraddr), sizeof(struct sockaddr));
	listen(listenfd, LISTENQ);
	maxi = 0;
	for ( ; ; ) 
	{
		// 等待epoll事件的發(fā)生
		nfds=epoll_wait(epfd,events,20,500);
		// 處理所發(fā)生的所有事件
		for (i = 0; i < nfds; ++i)
		{
			if (events[i].data.fd == listenfd)
			{
				connfd = accept(listenfd, (struct sockaddr *)(&clientaddr), (socklen_t *)&l_sinSize);
				if (connfd < 0)
				{
					perror("connfd < 0");
					exit(1);
				}
				setnonblocking(connfd);
				char* str = inet_ntoa(clientaddr.sin_addr);
				std::cout<<"connect from "<<str<<std::endl;
				// 設(shè)置用于讀操作的文件描述符
				ev.data.fd = connfd;
				// 設(shè)置用于注測的讀操作事件
				ev.events = EPOLLIN|EPOLLET;
				// 注冊ev
				epoll_ctl(epfd, EPOLL_CTL_ADD, connfd, &ev);
			}
			else if (events[i].events&EPOLLIN)
			{
				if ((sockfd = events[i].data.fd) < 0)
				{
					continue;
				}
/*
				if ((n = read(sockfd, line, MAXLINE)) < 0)
				{
					if (errno == ECONNRESET)
					{
						close(sockfd);
						events[i].data.fd = -1;
					}
					else
					{
						std::cout<<"readline error"<<std::endl;
					}
				}
				else if (n == 0)
				{
					close(sockfd);
					events[i].data.fd = -1;
				}

*/				
				while(rs)
				{
					n = recv(sockfd, line, MAXLINE, 0);
					if(n < 0)
					{
						// 由于是非阻塞的模式,所以當(dāng)errno為EAGAIN時,表示當(dāng)前緩沖區(qū)已無數(shù)據(jù)可讀
						// 在這里就當(dāng)作是該次事件已處理處.
						if(errno == EAGAIN)
						{
							break;
						}
						else
						{
							return;
						}
					}
					else if(n == 0)
					{
						// 這里表示對端的socket已正常關(guān)閉.
					}

					if(n == sizeof(line))
					{
						rs = 1;   // 未讀完 需要再次讀取
					}
					else
					{
						rs = 0;
					}
				}

				//設(shè)置用于寫操作的文件描述符
				ev.data.fd = sockfd;
				//設(shè)置用于注測的寫操作事件
				ev.events = EPOLLOUT|EPOLLET;
				//修改sockfd上要處理的事件為EPOLLOUT
				epoll_ctl(epfd, EPOLL_CTL_MOD, sockfd, &ev);
			}
			else if(events[i].events&EPOLLOUT)
			{
				sockfd = events[i].data.fd;
				ssize_t l_writeSize = write(sockfd, line, n);
				std::cout<<"write "<<l_writeSize<<std::endl;
				//設(shè)置用于讀操作的文件描述符
				ev.data.fd = sockfd;
				//設(shè)置用于注測的讀操作事件
				ev.events = EPOLLIN|EPOLLET;
				//修改sockfd上要處理的事件為EPOLIN
				epoll_ctl(epfd, EPOLL_CTL_MOD, sockfd, &ev);
			}
		}
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产乱码最新视频| 久久99精品久久只有精品| 午夜视频在线观看一区二区| 国产呦萝稀缺另类资源| 色呦呦一区二区三区| 国产日韩欧美在线一区| 人人狠狠综合久久亚洲| 欧美性受xxxx黑人xyx| 日韩毛片一二三区| 国产成人精品1024| 精品国产乱码久久久久久久 | 国产日本亚洲高清| 日本在线播放一区二区三区| 在线日韩av片| 中文字幕亚洲成人| 国产精品一线二线三线| 日韩一级黄色大片| 婷婷中文字幕综合| 在线欧美小视频| 一区二区三区加勒比av| 97精品视频在线观看自产线路二| 久久久777精品电影网影网| 老色鬼精品视频在线观看播放| 在线不卡中文字幕| 婷婷夜色潮精品综合在线| 欧美日韩在线直播| 午夜欧美电影在线观看| 欧美日韩黄色一区二区| 婷婷六月综合亚洲| 91精品国产91久久久久久一区二区 | 中文字幕精品一区二区精品绿巨人 | 高清不卡一二三区| 国产亚洲精品福利| 成人免费毛片高清视频| 亚洲欧洲日韩av| 色综合视频一区二区三区高清| 亚洲桃色在线一区| 欧洲国产伦久久久久久久| 亚洲国产日日夜夜| 欧美一区午夜视频在线观看| 蜜桃av一区二区在线观看 | 国产精品色婷婷久久58| 成人午夜视频在线| 亚洲丝袜制服诱惑| 欧美午夜视频网站| 麻豆精品国产传媒mv男同| 久久午夜老司机| 9l国产精品久久久久麻豆| 亚洲另类春色国产| 日韩亚洲欧美一区| 成人毛片在线观看| 亚洲一区二区精品视频| 日韩欧美的一区二区| 成人激情图片网| 亚洲午夜精品在线| 精品国产一区二区三区四区四| 风间由美一区二区三区在线观看 | 久久精品视频免费| 91成人免费网站| 美女久久久精品| 综合久久一区二区三区| 3d动漫精品啪啪1区2区免费| 国产成人免费高清| 午夜av电影一区| 中文欧美字幕免费| 日韩欧美国产一区在线观看| 激情综合色播激情啊| 亚洲欧美日韩电影| 精品国产露脸精彩对白| 色噜噜久久综合| 激情综合五月天| 亚洲免费在线观看| 久久理论电影网| 欧美精品自拍偷拍| 99免费精品在线观看| 麻豆国产欧美日韩综合精品二区| 国产欧美日韩不卡| 日韩一区二区免费在线观看| 91免费版pro下载短视频| 国产一区三区三区| 亚洲成人av一区二区| 国产精品视频yy9299一区| 日韩一卡二卡三卡四卡| 色欧美乱欧美15图片| 丰满少妇久久久久久久| 另类欧美日韩国产在线| 亚洲一区二区三区自拍| 国产精品国产馆在线真实露脸| 欧美成人激情免费网| 欧美日韩日本视频| 欧美专区日韩专区| 93久久精品日日躁夜夜躁欧美| 国产麻豆一精品一av一免费| 视频精品一区二区| 亚洲一二三四区| 亚洲图片另类小说| 国产精品久久久久久一区二区三区 | 韩国女主播成人在线观看| 亚洲资源中文字幕| 亚洲欧美成aⅴ人在线观看| 国产欧美日韩亚州综合| 久久影院视频免费| 久久无码av三级| 亚洲国产综合91精品麻豆| 国产精品天天看| 国产欧美日韩久久| 国产欧美在线观看一区| 久久婷婷国产综合精品青草 | 六月婷婷色综合| 日日摸夜夜添夜夜添精品视频| 亚洲美女精品一区| 一区二区三区在线观看国产| 亚洲三级免费观看| 亚洲免费资源在线播放| 一区二区三区高清不卡| 亚洲亚洲人成综合网络| 五月开心婷婷久久| 蜜臀av一区二区在线免费观看| 麻豆精品国产传媒mv男同| 麻豆精品在线观看| 国产一区二区在线影院| 国产91丝袜在线播放0| 97久久精品人人澡人人爽| 色噜噜久久综合| 这里只有精品电影| 国产亚洲一二三区| 亚洲人成网站色在线观看| 亚洲国产精品人人做人人爽| 日一区二区三区| 国产福利一区二区三区视频| 99国产精品久久久久久久久久| 91香蕉国产在线观看软件| 欧美日韩视频一区二区| 精品国产免费视频| 中文字幕视频一区二区三区久| 亚洲午夜精品17c| 麻豆免费看一区二区三区| 国产69精品久久777的优势| 色偷偷一区二区三区| 欧美一区二区精品| 久久精品一区四区| 亚洲一区日韩精品中文字幕| 捆绑调教一区二区三区| 99精品欧美一区二区蜜桃免费| 欧美日韩国产天堂| 国产日韩精品一区二区浪潮av| 一区二区三区在线免费观看| 蜜臀精品久久久久久蜜臀| 波多野结衣的一区二区三区| 欧美日韩高清在线播放| 国产偷国产偷精品高清尤物| 一区二区三区在线高清| 国产在线精品免费av| 欧美性videosxxxxx| 久久免费美女视频| 亚洲午夜在线电影| 国产成人免费网站| 欧美一区二区三区在线观看视频 | 欧美大胆一级视频| 亚洲丝袜美腿综合| 国产一区二区三区黄视频| 日本道精品一区二区三区| 国产亚洲婷婷免费| 蜜桃视频第一区免费观看| 91免费视频观看| 久久九九久久九九| 男人的j进女人的j一区| 99re视频这里只有精品| 亚洲精选免费视频| 国产91清纯白嫩初高中在线观看| 欧美日韩国产另类一区| 亚洲啪啪综合av一区二区三区| 国内成人精品2018免费看| 欧美日韩国产区一| 亚洲精品乱码久久久久| 成人午夜av在线| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩中文欧美在线| 欧美人与z0zoxxxx视频| 亚洲一区成人在线| 色哟哟一区二区三区| 国产精品第五页| 国产成人av电影在线观看| 精品精品国产高清a毛片牛牛 | 有码一区二区三区| 成人av免费观看| 国产欧美一二三区| 成人三级在线视频| 中文字幕成人av| 国产大片一区二区| 久久精品视频网| 国产凹凸在线观看一区二区| 国产日韩欧美综合在线| 国产成人精品网址| 中文字幕免费在线观看视频一区| 国产mv日韩mv欧美| 中文字幕一区三区| 99视频超级精品| 亚洲黄网站在线观看| 欧美视频在线一区|