日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux网络编程-----几种服务器模型及io多路复用函数

發布時間:2024/4/19 linux 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux网络编程-----几种服务器模型及io多路复用函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

libevent實現了對io多路復用函數的封裝,復習一下linux下的io復用函數,select,poll,epoll

在c/s模型中,要處理多個客戶端的請求以達到并發處理的效果,有以下幾種方法

  • 主線程accept,多線程處理,為每一個客戶端開一個線程
  • 主進程accept,多進程處理,為每一個客戶端開一個進程
  • 線程池/進程池,將程序執行過程中線程/進程的創建銷毀開銷放在程序一開始執行時進行,進一步可以動態改變池中線程/進程個數
  • io多路復用函數,單線程模式

多線程模式的服務器模型大體如下

//server.cpp #include <iostream>#include <cerrno> #include <cstdlib> #include <cstdio> #include <cstring> #include <unistd.h>#include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>#include <pthread.h>void* process_client(void* arg);int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd < 0){std::cerr << "socket error" << std::endl;return -1;}struct sockaddr_in servaddr;bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(8080);servaddr.sin_addr.s_addr = INADDR_ANY;if(bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){close(sockfd);std::cerr << "bind error" << std::endl;return -1;}if(listen(sockfd, 10) < 0){close(sockfd);std::cerr << "listen error" << std::endl;return -1;}struct sockaddr_in addr;bzero(&addr, sizeof(addr));socklen_t len = sizeof(addr);while(true){/* 主線程接受客戶端請求,每一個子線程處理一個服務器與客戶端的交互 */int fd = accept(sockfd, (struct sockaddr*)&addr, &len);pthread_t tid;pthread_create(&tid, NULL, process_client, (void*)&fd);pthread_detach(tid);}close(sockfd);return 0; }void *process_client(void *arg) {int fd = *static_cast<int *>(arg);char reply[] = "server has receive your message";char msg[4096];/* 每個線程一個循環 */while(true){bzero(msg, sizeof(msg));int ret = recv(fd, msg, sizeof(msg), 0);if(ret < 0){continue;}else if(ret == 0){ std::cout << "close connection with client " << fd << std::endl;close(fd);pthread_exit(NULL);break;}else{msg[ret] = '\0';std::cout << "receive from client " << fd << " : " << msg << std::endl;ret = send(fd, reply, strlen(reply), MSG_NOSIGNAL);if(ret < 0){continue;}else if(ret == 0){std::cout << "close connection with client " << fd << std::endl;close(fd);pthread_exit(NULL);break;}}}} //client.cpp #include <iostream> #include <string>#include <cerrno> #include <cstdio> #include <cstring> #include <cstdlib> #include <unistd.h>#include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in servaddr;bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(8080);inet_aton("127.0.0.1", &servaddr.sin_addr);connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));std::string msg;char res[4096];while(true){getline(std::cin, msg);if(msg == "exit"){close(sockfd);break;}if(send(sockfd, msg.c_str(), msg.size(), MSG_NOSIGNAL) <= 0){std::cout << "close connection from server" << std::endl;close(sockfd);break;}int len = recv(sockfd, res, sizeof(res), 0);if(len <= 0){std::cout << "close connection from server" << std::endl;close(sockfd);break;}res[len] = '\0';std::cout << "receive from server" << res << std::endl;}return 0; }

多進程模式的服務器模型如下

//server.cpp #include <iostream> #include <string>#include <cstring> #include <cstdlib>#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>void process_client(int fd);int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in servaddr;bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(8080);servaddr.sin_addr.s_addr = INADDR_ANY;bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));listen(sockfd, 10);struct sockaddr_in addr;socklen_t len = sizeof(addr);signal(SIGCHLD, SIG_IGN);while(true){int fd = accept(sockfd, (struct sockaddr*)&addr, &len);std::cout << "receive a new client " << fd << std::endl;if(fork() == 0){close(sockfd);process_client(fd);exit(EXIT_SUCCESS);}else{close(fd);}}close(sockfd);return 0; }void process_client(int fd) {char reply[] = "server has receive your message";char msg[4096];while(true){int len = recv(fd, msg, sizeof(msg), 0);if(len <= 0){std::cerr << "close connection with client" << fd << std::endl;close(fd);break;}msg[len] = '\0';std::cout << "receive from client" << fd << " : " << msg << std::endl;if(send(fd, reply, strlen(reply), MSG_NOSIGNAL) <= 0){std::cout << "close connection with client" << fd << std::endl;close(fd);break;}} } //client.cpp //同多線程client.cpp

創建進程時關閉套接字的原因:

  • fork創建進程,是將主進程的內存空間copy一份作為子進程的內存空間,這就導致了監聽套接字也被copy了,從而監聽套接字的引用計數變為2,這樣如果子進程不close掉,而僅僅主進程close,那么監聽套接字就不會被關閉。當然進程結束后會自動關閉相應的套接字,但還是手動關閉的好,以免在子進程中使用exec,就沒辦法關閉了
  • 主進程同理,客戶端套接字引用計數為2,也需要關閉一個

線程池模式下的服務器模型
需要注意的幾點

  • 在程序開始時就創建一定數量的線程池,初始化互斥鎖和條件變量
  • 維護一個任務隊列,采用互斥鎖保護隊列中的任務只被一個線程執行
  • 采用條件變量保證在沒有任務時的cpu使用情況,即不需要不斷輪循查看是否有任務沒有被執行
  • 擴展可以動態改變池中線程個數,保證既沒有過多線程空閑,也沒有過多任務沒有被執行
  • 釋放線程空間,釋放互斥鎖和條件變量
    代碼(沒有實現動態改變線程個數)

進程池模式下的服務器模型


io多路復用函數
上述這些方法在某種程度上都有缺陷,當客戶端請求過多時效率都會降低,內存消耗都比較明顯。對于處理高并發的客戶端請求,可以采用io多路復用的的方法,linux下提供了select,poll,epoll三個函數,使用這些函數時可以把監控的套接字設置成非阻塞(可以使用fcntl函數實現)。
select
select是早期的io多路復用函數,函數原型如下

#include <sys/select.h> int select(int maxfdp1, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *tvptr);

傳給select的參數告訴內核

  • 用戶所關心的描述符
  • 對于每個描述符,用戶所關心的事件,可讀,可寫,出現異常
  • 愿意等待的時長,可以永遠等待,等待一個固定時長或者根本不等待

從slect返回時內核通知進程
- 已準備好的描述符總數量
- 每一個描述符是否可讀/可寫/出現異常(需要用戶手動判斷每一個,不能直接定位到準備好的描述符)

select最后一個參數tvptr指定愿意等待的時間長度,有三種情況

  • NULL:永遠等待直到有某(些)個描述符準備好才返回
  • tvptr->tv_sec==0 && tvptr->tv_usec==0:不等待,直接返回
  • tvptr->tv_sec!=0 || tvptr->tv_usec!=0:等待指定的時間,當某個描述符準備好,或者時間到,select就會返回。注意如果某個描述符準備好,而時間沒有到,也會立即返回

readfds,writefds,exceptfds是指向描述符集的指針,都是fd_set*類型,fd_set有不同的實現方式,可以是每一位作為一個描述符,也可以是一個很大的數組。
在使用select之前,用戶需要手動初始化需要的描述符集,不關心的可以傳入NULL。使用方法如下

/* ... */ /* 創建監聽套接字listenfd *//* 如果只關心可讀事件,就不需要初始化其他兩個fd_set */ fd_set readfds_in, readfds_out;/* 記錄最大的描述符,用于select的參數 */ int maxfd = listenfd;FD_ZERO(&readfds_in); FD_SET(listenfd, &readfds_in);while(true) {/* 清空fd_set */FD_ZERO(&readfds_out);/* 將關心的描述符添加到關心的事件集中 */memcpy(readfds_out, readfds_in, sizeof(readfds_in));/* 時間為NULL表示永久阻塞,知道有描述符準備好才返回 */int n = select(maxfd + 1, readfds_out, NULL, NULL, NULL);if(n < 1){perror("select error");exit(1);}/* 返回后通過FD_ISSET判斷某個文件描述符是否準備好 */if(FD_ISSET(listenfd, &readfds)){struct sockaddr_in servaddr;bero(&servaddr, sizeof(servaddr);socklen len = sizeof(servaddr);int clientfd = accept(listenfd, (struct sockaddr*)&servaddr, &len);if(maxfd < clientfd)maxfd = clientfd;FD_SET(clientfd, &readfds_in);}for(int fd = 0; fd < maxfd + 1; ++fd){if(fd == listenfd)continue;if(FD_ISSET(fd, &readfds_out)){char msg[4096];bzero(msg, sizeof(msg));int ret = recv(fd, msg, sizeof(msg), 0);if(ret == 0){FD_CLR(readfds_in);close(fd);}else if(ret < 0){continue;}else{printf("receive from client %s\n", msg);char reply[] = "i have receive your message";send(fd, reply, strlen(reply), MSG_NOSIGNAL);}}} }

select使用FD_SET添加描述符,使用FD_ISSET判斷是否某個描述符準備好??梢园裦d_set想象成一個位數組,每一位代表一個描述符,使用FD_ZERO時將每一位置為0,使用FD_SET時將對應位置為1,在select中返回后,將準備好的描述符對應的那一為的1保留,沒有準備好的描述符對應的那一位置為0。FD_ISSET就判斷對應位是否為1即可知道描述符是否準備好。

但是select的缺陷還是很多的

  • 每次循環都需要調用FD_ZERO清空描述符集,這就導致需要用戶手動再添加關心的描述符,很麻煩,libevent是通過上述方法解決這一問題的,即添加到readfds_in,select時改變readfds_out,這樣每次循環只需要將readfds_in復制給readfds_out即可
  • 不能直接定位到準備好的描述符上,用戶需要手動遍歷所有的描述符判斷哪些準備好
  • 每次調用select,都需要把fd集合從用戶態拷貝到內核態
  • 每次調用select都需要在內核遍歷所有的fd
  • select支持的描述符數量太小,默認為1024

poll
poll函數類似于select,相比于select使用起來更簡單,但是仍然沒有解決輪循判斷描述符是否準備好的問題,換句話說,當描述符數量很大時,效率仍然很低
poll函數的原型如下

#include <poll.h> int poll(struct pollfd fdarray[], nfds_t nfds, int timeout);

與select不同,poll不是為每一個事件構造一個描述符集,而是構造一個pollfd結構的數組,每個數組元素指定一個描述符以及用戶關心的事件

struct pollfd {int fd; /* 描述符 */short events; /* 用戶關心的事件,調用poll時由用戶設置 */short revents; /* 是什么事件將描述符激活,在poll返回時由內核設置*/ };

events可以由以下幾種通過或運算結合在一起

  • POLLIN:可讀
  • POLLOUT:可寫
  • POLLERR:出錯
  • POLLHUP:掛斷
  • POLLNVAL:描述符沒有綁定到一個文件/TCP連接

poll的等待時長是int類型

  • timeout == -1:永遠等待或者某個描述符準備好后返回
  • timeout == 0:不等待,直接返回
  • timeout > 0:等待指定微秒或者某個描述符準備好后返回

使用方法同select,構造一個很大的pollfd數組,調用時傳入一個當前最大描述符大一的值,返回后判斷每個描述符是否準備好,這一點和select一樣,poll不能直接定位到準備好的哪些描述符,需要判斷每一個的revents


epoll
與select和poll不同,epoll克服了二者的缺陷,在阻塞等待過程中不是循環遍歷每個描述符判斷是否準備好以便返回,而是通過內核中的相應fd回調函數的調用直接得知某個文件描述符已經被激活(準備好),這就解決多當描述符數量過多時效率下降的問題。另外,epoll在返回后將所有已經準備好的描述符都存放在了一個數組中,用戶不再需要手動遍歷每一個描述符以判斷是否是準備好的,大大提高了效率。通常在處理高并發的客戶端請求時都會使用epoll代替上面兩個。
epoll使用struct epoll_event結構體來存儲描述符和事件

struct epoll_event {__uint32_t events; /* 監聽的事件集,使用或運算結合在一起 */epoll_data_t data; };typedef union epoll_data {void *ptr;int fd; /* 監聽的描述符 */__uint32_t u32;__uint64_t u64; }epoll_data_t;

events可以是以下幾種的或運算結果

  • EPOLLIN:描述符可讀
  • EPOLLOUT:描述符可寫
  • EPOLLERR:描述符出錯
  • EPOLLHUP:描述符被掛斷
  • EPOLLET:設置為邊緣觸發,相對于水平觸發而言

epoll提供了幾個接口

/* 創建一個epoll監聽描述符,參數為最大需要監聽描述符的個數 */ int epoll_create(int size);/* *epoll的事件注冊函數*epfd: 通過epoll_create創建的監聽描述符*op: 想要執行的操作,添加描述符的監聽EPOLL_CTL_ADD, 修改描述符的監聽EPOLL_CTL_MOD,刪除描述符的監聽EPOLL_CTL_DEL*event: 對fd想要監聽的事件,或者更新的事件*/ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);/* *epoll阻塞等待函數*events是一個數組,用于存放所有準備好的描述符epoll_event*maxevents是最大可以接受多少個激活的epoll_event,不能超過epoll_create傳入的參數*timeout超時時長*/ int epoll_wait(int epfd, struct epoll_event* events, int maxevents, int timeout);

使用方法如下

//server.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h>#include <sys/epoll.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd < 0)return 0;struct sockaddr_in servaddr;bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(8080);servaddr.sin_addr.s_addr = INADDR_ANY;if(bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){close(sockfd);return 0;}if(listen(sockfd, 10) < 0){close(sockfd);return 0;}int epollfd = epoll_create(1024);struct epoll_event events[1024];int fd_numbers = 1;struct epoll_event event;event.data.fd = sockfd;event.events = EPOLLIN | EPOLLET;epoll_ctl(epollfd, EPOLL_CTL_ADD, sockfd, &event); while(1){int n = epoll_wait(epollfd, events, fd_numbers, -1);if(n < 1)break;/* 直接遍歷events數組, 不需要遍歷所有fd判斷哪個fd被激活 */for(int i = 0; i < n; ++i){int fd = events[i].data.fd;short fd_event = events[i].events;/* 出現異常 */if((fd_event & EPOLLHUP) || (fd_event & EPOLLERR) || !(fd_event & EPOLLIN)){perror("epoll error");close(fd);epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, NULL);--fd_numbers;}/* 有客戶端請求連接服務器 */else if(fd == sockfd){struct sockaddr_in clientaddr;bzero(&clientaddr, sizeof(clientaddr));socklen_t len = sizeof(clientaddr);int client_fd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);struct epoll_event client_event;client_event.data.fd = client_fd;client_event.events = EPOLLIN | EPOLLET;epoll_ctl(epollfd, EPOLL_CTL_ADD, client_fd, &client_event);++fd_numbers;}else{char msg[4096];bzero(msg, sizeof(msg));int recv_ret = recv(fd, msg, sizeof(msg), 0);/* 如果客戶端close,那么客戶端fd會變為可讀,讀取時返回0表示連接關閉*/if(recv_ret == 0){printf("close connection with %d\n", fd);close(fd);epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, NULL);--fd_numbers;}else if(recv_ret > 0){printf("recv from %d: %s\n", fd, msg);char reply[] = "server has received client message";if(send(fd, reply, strlen(reply), MSG_NOSIGNAL) == 0){printf("close connection with %d\n", fd);close(fd);epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, NULL);--fd_numbers;}}}}}close(epollfd);close(sockfd);return 0; } //client.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h>#include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <netinet/in.h>int main() {int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in sockaddr;bzero(&sockaddr, sizeof(sockaddr));sockaddr.sin_family = AF_INET;sockaddr.sin_port = htons(8080);sockaddr.sin_addr.s_addr = inet_addr("127.0.0.1");//inet_aton(&sockaddr.sin_addr, "127.0.0.1");if(connect(sockfd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)) < 0){close(sockfd);return 0;}char msg[4096];while(1){bzero(msg, sizeof(msg));scanf("%s", msg);if(strcmp(msg, "exit") == 0){break;}send(sockfd, msg, strlen(msg), MSG_NOSIGNAL);int len = recv(sockfd, msg, sizeof(msg), 0);msg[len] = '\0';printf("receive from server %s\n", msg);}close(sockfd);return 0; }

epoll相比于select與poll,克服了二者的缺點

  • epoll在每次epoll_ctl添加fd時就將這個fd拷貝到內核,保證了整個epoll過程中同一個fd只拷貝一次,而select每次都需要重新將所有fd拷貝到內核
  • epoll在epoll_ctl時為每一個fd設置一個回調函數,當這個fd就緒,就會調用相應回調函數,函數中將對應的fd添加到一個就緒鏈表,epoll_wait實際上就在就緒鏈表中查看所有就緒的fd。而select和poll則需要遍歷整個fd以判斷是否有哪個fd就緒。epoll采用回調機制提升性能,效果明顯
  • epoll可以支持的描述符數量很大

總結

以上是生活随笔為你收集整理的linux网络编程-----几种服务器模型及io多路复用函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

免费观看性生活大片 | 亚洲 欧美 日韩 综合 | 97在线超碰| 国产视频一区二区在线 | 99热这里只有精品免费 | 狠狠色免费 | 黄网站色 | 又黄又爽又无遮挡的视频 | 亚洲精品国产精品乱码不99热 | 婷婷综合久久 | 亚洲另类xxxx | 9久久精品 | 欧美日韩免费一区二区三区 | 91探花视频| 成人激情开心网 | 国产资源av | 国产精品大片在线观看 | 国产一区二区久久精品 | 亚洲精品黄 | 国产破处精品 | 国产在线精品区 | 欧美日韩性视频 | 91亚洲综合 | a√国产免费a| 国产99在线免费 | 精品亚洲一区二区三区 | 四虎影视国产精品免费久久 | 欧美少妇xxxxxx | 亚洲国产精品第一区二区 | 亚洲国产中文在线 | 麻花豆传媒mv在线观看网站 | 日本在线精品视频 | 久久久久成人精品免费播放动漫 | 激情欧美在线观看 | 国产精品一区二区三区99 | 欧美激情操 | 日日天天| 四虎成人免费观看 | 午夜视频在线观看一区二区三区 | 这里只有精品视频在线观看 | 久久免费视频这里只有精品 | 蜜臀aⅴ国产精品久久久国产 | 日韩丝袜| 97碰视频| 丁香九月婷婷综合 | 天天天操操操 | 在线观看日韩av | 亚洲成人高清在线 | 黄色网中文字幕 | av在线免费观看不卡 | 五月开心婷婷网 | www麻豆视频 | 91激情视频在线播放 | 亚洲成人网av | 丁香av| 国产日韩精品欧美 | 免费看十八岁美女 | 亚洲视频 视频在线 | 国产一区在线免费观看 | 91av视频在线观看 | 九九久久久久久久久激情 | 成人性生活大片 | 久草精品视频在线播放 | 超碰97网站| 国产黄色片一级三级 | 91精品伦理| av日韩精品| 97人人澡人人爽人人模亚洲 | 日韩一区二区三区高清在线观看 | 国产精品久久久久影院日本 | 欧美日韩国产三级 | 国产精品21区 | 91中文在线视频 | 欧美专区国产专区 | a视频免费 | 欧美孕妇视频 | 97天堂网 | 国产成人福利在线 | 成人性生交大片免费看中文网站 | 日韩理论片在线 | 在线观影网站 | 黄色三级免费网址 | 久久久久久久久亚洲精品 | 精品一区电影国产 | 福利视频区 | 国产精品久久久久久久久久久久午夜 | 国产一区av在线 | 中文字幕资源站 | 日韩黄色在线观看 | 免费在线成人av | 最新真实国产在线视频 | 久久伊人国产精品 | 欧洲精品视频一区二区 | 久久免费看毛片 | 国产在线超碰 | 激情中文在线 | 最近中文字幕mv | 精品欧美一区二区三区久久久 | 91综合视频在线观看 | a天堂一码二码专区 | 黄色软件视频大全免费下载 | 国产精品久久久久久久久免费 | www免费看片com| 天天爽夜夜爽人人爽曰av | 国产视频精品免费播放 | 国产精品五月天 | 五月天久久婷 | 国产资源网 | av在线影视| 欧美成人精品在线 | 国产糖心vlog在线观看 | 91久久影院 | 久草影视在线观看 | 亚洲一区日韩在线 | 国产日韩精品在线 | 日韩精品免费一区二区三区 | 欧美大片aaa | 高清av网站 | 日韩黄色在线电影 | 久久爱影视i | 又黄又爽又湿又无遮挡的在线视频 | 99视频国产在线 | 国产一区二区久久 | 欧美一级日韩免费不卡 | 欧美成人视 | 免费精品在线视频 | 亚洲精品国产高清 | 久久亚洲私人国产精品 | 开心激情网五月天 | 91av小视频| 国产在线a| 91精品国产麻豆国产自产影视 | 免费在线观看不卡av | 黄色h在线观看 | 69国产成人综合久久精品欧美 | 国产夫妻av在线 | 久久人人爽人人片 | 色就是色综合 | 91精品免费看 | 91九色porny蝌蚪视频 | 中文字幕制服丝袜av久久 | 91麻豆网站 | 国产久视频 | 免费在线观看的av网站 | 一区二区三区免费在线 | 日韩欧美在线高清 | 中文字幕视频三区 | 天天视频色 | 碰超在线 | 超碰官网 | 中国一级片在线观看 | 亚洲视频精品在线 | 99av国产精品欲麻豆 | 成人亚洲欧美 | 青青草国产成人99久久 | 久久久久久电影 | 亚洲国产中文字幕 | 黄色小网站在线 | 亚洲精品高清视频 | 久久天天操 | www.黄色| 丁香婷婷亚洲 | 国产理论在线 | 349k.cc看片app | 天天干天天操天天拍 | 国产美腿白丝袜足在线av | 天天综合网久久 | 成人黄色在线看 | 偷拍久久久 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产精品一区二 | 欧美一区二区精美视频 | 中文字幕免费成人 | 免费男女网站 | 欧美专区亚洲专区 | 精品不卡av | av在线不卡观看 | 国产精品亚洲片在线播放 | 欧美夫妻性生活电影 | 亚洲国产精品激情在线观看 | 亚洲国产中文字幕 | 国产视频欧美视频 | 日韩性片| 日韩视频中文字幕在线观看 | 免费福利视频网站 | 高清不卡毛片 | 免费色av | 国产精品免费一区二区 | 国产免费人人看 | 91热视频| 人人爱人人做人人爽 | 在线视频国产区 | 丁香五婷| 日韩av资源在线观看 | 麻豆91在线观看 | 成人av电影免费在线播放 | 久久夜色精品国产欧美乱 | 国产99久久99热这里精品5 | 日韩在线第一区 | 国产精品一区二区精品视频免费看 | 在线视频亚洲 | 看全黄大色黄大片 | 美女黄视频免费看 | 中文字幕在线观看第一页 | 天天操天天摸天天爽 | 久久www免费人成看片高清 | 狠狠色丁香婷婷综合基地 | 亚洲欧美激情精品一区二区 | 国产精品免费久久久久影院仙踪林 | 一区二区三区国产精品 | 青青看片 | 欧美一性一交一乱 | 日本女人逼 | 亚洲成人av一区二区 | 高清有码中文字幕 | 激情片av | 五月婷婷丁香综合 | 亚洲欧美国内爽妇网 | 天天色天天爱天天射综合 | 日本成人黄色片 | 午夜精品剧场 | 欧美久久久久久久久中文字幕 | 国产九九热 | 天天干天天操天天射 | 国产日韩中文字幕在线 | 久艹在线观看视频 | 九九久久国产精品 | 国产精品入口麻豆 | 久久成 | 91精品在线免费观看 | 又污又黄的网站 | 在线观看视频一区二区 | 国产999| 国产96av| 69久久夜色精品国产69 | 久久中文精品视频 | 精品国产诱惑 | 97超碰人人澡人人 | 97成人精品区在线播放 | 在线观看黄网站 | 黄色小说视频在线 | 亚洲精品国产品国语在线 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产在线观看免 | 一本一本久久aa综合精品 | 国产一区二区免费在线观看 | 91精品国产综合久久福利 | 日韩区视频| 综合五月 | 日日夜夜狠狠干 | 九九免费在线观看视频 | 中文字幕精品一区二区三区电影 | 国产精品视频永久免费播放 | 国产自产在线视频 | 国产免费观看久久黄 | 麻豆一区二区 | 欧美精品一区二区免费 | 波多野结衣一区二区 | 九色福利视频 | 久久久久电影网站 | 国产精品青草综合久久久久99 | 日韩av免费一区二区 | 国产精品入口a级 | av免费电影在线 | 欧美不卡视频在线 | 国产精品久久久久久久久大全 | 亚洲午夜久久久久久久久久久 | 久久中文视频 | 成人av影视| 在线看岛国av | 91久久在线观看 | 国产资源网站 | 国产久草在线 | 色婷婷久久久 | 毛片永久免费 | 中午字幕在线观看 | 亚洲一区二区三区精品在线观看 | 在线观看视频福利 | 日本aa在线| 色综合久久久久综合体 | 亚洲精品美女久久17c | 欧美激情精品久久久 | 国产精品毛片一区 | 成人综合婷婷国产精品久久免费 | 中文字幕免费一区二区 | 国内精品中文字幕 | 91精品区 | 亚洲免费精彩视频 | 亚洲九九精品 | 日韩精品一区二区三区高清免费 | 精品a在线 | 黄色免费在线视频 | 久久人视频 | 91成人精品视频 | 国产91影院 | 丁香婷婷激情网 | 99久久久久久国产精品 | 很黄很污的视频网站 | 一级全黄毛片 | 在线观看成人av | 日韩av手机在线观看 | 久久精品国产成人精品 | 午夜电影久久久 | 在线播放国产精品 | 九九久久精品视频 | 私人av| 9999免费视频 | 国内精品久久久久久久97牛牛 | 99中文在线 | 亚洲精品国产片 | 精品在线免费观看 | 中文字幕高清视频 | 国产高清永久免费 | 日韩亚洲欧美中文字幕 | 日韩一二三区不卡 | 亚洲国产色一区 | va视频在线观看 | 99久久99久久精品国产片 | 久久精品www人人爽人人 | 在线亚洲成人 | 国产精品免费视频久久久 | 亚洲天堂视频在线 | 久草网站 | 国产精品一区二区你懂的 | a√资源在线 | 中文字幕人成不卡一区 | 干综合网 | 国产精品成人久久久久 | 久久久久久综合 | 97超碰人人澡人人爱学生 | 久久这里 | 久久久久久黄色 | 性色va| 欧美色精品天天在线观看视频 | 日本动漫做毛片一区二区 | 狠狠插天天干 | 亚洲精品视频第一页 | 成人羞羞视频在线观看免费 | 国产成人99av超碰超爽 | 天天色天天操天天爽 | 国产精品免费久久久久 | 久久69精品久久久久久久电影好 | 在线免费av播放 | 久久精品中文字幕一区二区三区 | 成年人毛片在线观看 | 欧美日韩精品在线一区二区 | 91成人在线观看喷潮 | 国产片网站 | 一区二区不卡在线观看 | 中文字幕资源站 | 国产99久久久国产精品成人免费 | 一区二区三区高清 | 免费av在线网站 | 久草香蕉在线视频 | 久久久久美女 | 97福利在线观看 | 99精品国产一区二区三区麻豆 | 五月天丁香综合 | 国产一区在线不卡 | 99视频在线免费播放 | 日韩av一区二区三区在线观看 | 国产97免费 | 精品国精品自拍自在线 | 超碰在线94 | 中文字幕免费国产精品 | 国产婷婷精品 | 国产尤物在线观看 | 播五月综合 | 麻豆免费视频 | 欧美精品一区二区三区一线天视频 | 91亚洲精品久久久久图片蜜桃 | 久草久视频 | 国产精品私拍 | 精品亚洲在线 | 日韩艹 | 玖玖玖国产精品 | 国产在线免费 | 国产 欧美 日韩 | 欧美在线你懂的 | 国产精品一区二区三区在线 | 久久tv| 免费看污网站 | 黄色大片免费播放 | 国产精品成人一区二区 | 久久久国产99久久国产一 | 国产一区电影在线观看 | www.日日日.com | 久久精品国产精品 | 麻豆免费视频观看 | 国产精品免费久久 | 欧美激情视频久久 | 国产69精品久久久久久 | 美女视频黄,久久 | 在线精品视频在线观看高清 | 性色大片在线观看 | 一本之道乱码区 | 日韩精品亚洲专区在线观看 | 不卡视频一区二区三区 | 韩国av在线 | 精品久久久亚洲 | 97品白浆高清久久久久久 | 免费观看www小视频的软件 | 午夜av免费在线观看 | 亚洲精品在线资源 | 久久久资源网 | 国产高清视频免费观看 | 中文字幕日韩国产 | 99视频免费看 | 色视频在线观看 | 国产 日韩 中文字幕 | 国产精品女主播一区二区三区 | 久久久 精品 | av黄色免费看 | 亚洲精品美女免费 | 99看视频在线观看 | 成年人精品 | 人人爱人人射 | 性色av一区二区三区在线观看 | 激情欧美丁香 | 久久精品亚洲精品国产欧美 | 色婷五月天 | 色综合天天色 | 91精品人成在线观看 | 成人aⅴ视频 | 国语精品视频 | 最近乱久中文字幕 | 成年人黄色在线观看 | 激情综合中文娱乐网 | 国产视频二区三区 | 成人免费中文字幕 | www夜夜操 | 国产高清成人av | 成人一区二区三区中文字幕 | 青草视频免费观看 | 久精品视频在线观看 | 在线导航av | 日韩欧美高清 | 性日韩欧美在线视频 | 国产婷婷精品av在线 | 精品一区二区av | 国产午夜三级一区二区三桃花影视 | 日韩在线电影 | 日韩欧美在线视频一区二区三区 | 91精品啪在线观看国产线免费 | 天堂在线免费视频 | 亚洲免费观看在线视频 | 国产一级在线免费观看 | 国产一级久久 | 亚洲欧洲久久久 | 黄色成人影视 | 99久久婷婷国产综合亚洲 | 精品久久久久久电影 | 成人97视频一区二区 | 综合网中文字幕 | 81国产精品久久久久久久久久 | 日av免费 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 天天干天天操av | 天天干人人干 | 国产精品久久久久婷婷 | 91福利社在线观看 | 国产免费一区二区三区最新 | 天天伊人网 | 亚洲国产合集 | 国产一级片不卡 | av成人资源 | 综合久久久久久 | 国产精品福利在线观看 | 黄av免费在线观看 | 人人射 | 国产美女精彩久久 | 午夜视频一区二区 | 亚洲国产精品激情在线观看 | 三级小视频在线观看 | 久久久久久在线观看 | 99精品在线观看 | 精品久久久久久国产偷窥 | 97超碰人人干 | 亚洲少妇天堂 | www.久久免费| 丁香九月婷婷 | 日韩精品免费一线在线观看 | 欧美成人xxx | 国内精品久久久久久久久久久 | 亚洲一级理论片 | 久久精品一区二区 | 亚洲视频高清 | 中文字幕精品www乱入免费视频 | 久久久久久99精品 | 婷婷色中文 | 91tv国产成人福利 | 日韩高清在线一区二区三区 | 在线观看精品一区 | 亚洲成av人片一区二区梦乃 | 97在线超碰| 国产精品videossex国产高清 | 中文字幕在线观看国产 | 国产在线超碰 | 亚洲精品视频久久 | 精品一区二区久久久久久久网站 | 婷婷色在线资源 | 久久精品亚洲精品国产欧美 | 激情综合五月天 | 激情综合亚洲 | 在线色亚洲 | 中文字幕乱码在线播放 | 99精品视频在线 | www.色国产 | 国产精品一区久久久久 | 亚洲一级免费电影 | 国产成人一区二区三区在线观看 | 综合婷婷丁香 | 国产精品免费久久久久久久久久中文 | 99在线免费观看视频 | 婷色在线| 久久在线影院 | 国产亚洲午夜高清国产拍精品 | 色噜噜日韩精品一区二区三区视频 | 久色婷婷 | 日本中文一区二区 | 亚州精品天堂中文字幕 | 99国产一区二区三精品乱码 | 国产乱码精品一区二区三区介绍 | 久久永久免费视频 | 欧美性生活大片 | 国产主播大尺度精品福利免费 | 美女又爽又黄 | 在线 视频 一区二区 | 久久99在线观看 | 亚洲一区精品二人人爽久久 | 91精品国产99久久久久久久 | 国产精品乱码一区二三区 | 成人a免费看 | 成年人在线 | 久久久久久久久久网 | 国产精品 亚洲精品 | 成人av资源网站 | 中文字幕一区2区3区 | 999一区二区三区 | 亚洲 中文字幕av | 五月色丁香 | 欧美孕交vivoestv另类 | 又爽又黄又无遮挡网站动态图 | 狠狠色丁香婷婷综合橹88 | 国产在线无 | 亚洲精品麻豆 | 99久久久久久国产精品 | 天堂av官网 | 亚洲精品乱码久久久久久9色 | 三级黄色免费片 | 999在线视频 | 亚洲国产丝袜在线观看 | 日韩三级.com | www.黄色片网站 | 欧美不卡视频在线 | 天天射色综合 | 国产 日韩 在线 亚洲 字幕 中文 | 丁香六月在线 | 久久好看免费视频 | 久久99精品久久久久婷婷 | 蜜臀av在线一区二区三区 | 国产不卡免费视频 | 香蕉免费 | 手机av在线免费观看 | www.精选视频.com | 在线免费看黄色 | 午夜精品视频一区二区三区在线看 | 亚洲在线国产 | 国内精品久久久精品电影院 | 玖玖视频| 日韩欧美有码在线 | 欧美精品xx | 日韩中文字幕电影 | 香蕉视频在线观看免费 | 97超碰免费在线观看 | 久久不色 | 在线观看视频精品 | 国产在线高清精品 | 日日日日 | 狠狠狠综合 | 国产欧美综合视频 | 国产午夜精品一区 | 精品国产伦一区二区三区观看方式 | 久久在现| 麻豆av一区二区三区在线观看 | 国产一级二级视频 | 亚洲成人黄色网址 | 韩日精品在线观看 | 黄色在线观看免费网站 | 久久综合九色综合久99 | 中文字幕乱码电影 | 国产丝袜一区二区三区 | 午夜91在线 | 免费av在线网站 | 国产免费观看高清完整版 | 成人网在线免费视频 | 欧美成人高清 | 日韩精品视频一二三 | 国产网站在线免费观看 | 婷婷四房综合激情五月 | 97高清视频 | 日韩欧美视频一区二区三区 | 日日日日 | 久久这里只有精品视频99 | 在线成人免费电影 | 91精品网站在线观看 | 亚洲精品国偷自产在线99热 | 久久艹国产 | 日韩av电影免费观看 | 99精品国产成人一区二区 | 日韩欧美黄色网址 | 日本字幕网 | 999久久国产精品免费观看网站 | av在线永久免费观看 | 亚洲精品免费在线观看视频 | 天天操天天射天天操 | 色婷婷亚洲| 亚洲精品在线观看视频 | 久久综合给合久久狠狠色 | 成人av电影免费在线观看 | 亚州国产视频 | 久久免费中文视频 | 91在线观看高清 | 国产亚洲小视频 | 视频在线91 | 亚洲国产一区av | 日韩一区二区三区高清免费看看 | 色综合久久88色综合天天免费 | 精品爱爱 | a成人v| 国产精品美女久久久久久久久 | 亚在线播放中文视频 | 黄色精品一区二区 | 激情电影影院 | 99久久久久久| 欧美a视频 | 日本二区三区在线 | 91中文字幕| 久久a免费视频 | 亚洲高清视频一区二区三区 | 激情五月婷婷综合网 | 亚洲乱亚洲乱妇 | 日日操天天射 | 久久影院中文字幕 | 亚洲国产小视频在线观看 | 夜夜高潮夜夜爽国产伦精品 | 五月婷香蕉久色在线看 | 久久精品男人的天堂 | 久久草草影视免费网 | 91影视成人 | 九九久久在线看 | 色婷婷综合久久久久 | 视频国产一区二区三区 | 国产精品福利无圣光在线一区 | 超碰在线资源 | 日日日网 | 久久久久免费视频 | 精品亚洲视频在线观看 | 色多多污污在线观看 | www日| 91精品国产亚洲 | 免费亚洲黄色 | 亚洲精品久久久久中文字幕二区 | avv天堂| 国产女人免费看a级丨片 | www免费看 | 亚洲精品国偷自产在线91正片 | 福利网址在线观看 | 国产不卡精品 | 激情喷水| 91私密保健 | 国产精品ssss在线亚洲 | 五月开心婷婷 | 久久久久免费精品视频 | 日韩中午字幕 | 97人人模人人爽人人少妇 | 国产精品美女网站 | 97超碰在 | 一区二区精品在线观看 | 日韩免费看的电影 | 久久超碰99 | 国产成人精品日本亚洲999 | 国产免费午夜 | 欧美一区二区三区在线 | 国产乱对白刺激视频不卡 | 在线视频电影 | 91看片网址 | 国产精品久久久久三级 | 在线看不卡av | 午夜精品久久久久久久久久 | 免费黄色在线播放 | 中文字幕乱偷在线 | 欧美性黑人 | 在线视频在线观看 | 在线高清av| 国内久久久 | 天天爱天天操 | 9992tv成人免费看片 | 国产亚洲在线观看 | 欧美另类交在线观看 | 久久伊人八月婷婷综合激情 | 中文字幕视频在线播放 | 成人av片在线观看 | 成人免费观看电影 | 毛片888 | 久久国际影院 | 国产一级精品绿帽视频 | 毛片网站观看 | 久久久免费看视频 | 色综合久久精品 | 色香蕉在线 | 色99导航| 精品久久久久久国产偷窥 | 亚洲一区二区精品在线 | 色在线视频网 | 天堂网一区 | 久久久久久久国产精品 | 视频一区二区国产 | 中文在线8新资源库 | 偷拍视频一区 | 亚洲视频免费在线 | 亚洲jizzjizz日本少妇 | 日韩在线一级 | 国产精品激情偷乱一区二区∴ | 国产97在线播放 | 欧美日韩视频在线一区 | 最近中文字幕免费大全 | 久久成人精品电影 | 麻豆久久精品 | 91精品一区二区在线观看 | 国产精品3 | 亚洲精品免费观看视频 | 特黄特色特刺激视频免费播放 | a午夜在线| 久久97精品 | 久久精品一区二区三区国产主播 | 99久久精品无免国产免费 | www.久久色 | 久久草视频| 看av免费 | 久久免费在线 | 夜夜嗨av色一区二区不卡 | 日日爽天天操 | 日本在线观看一区二区 | 天天摸天天弄 | 免费日韩精品 | 色天天综合久久久久综合片 | 奇米7777狠狠狠琪琪视频 | 精品国产_亚洲人成在线 | 国产91国语对白在线 | 五月婷久久 | 五月丁色 | 麻豆视频大全 | 国产福利一区二区三区视频 | 精品91视频 | 国产日韩中文在线 | 精品久久毛片 | 黄色国产在线观看 | 国产精品视频久久久 | 在线电影播放 | 日韩在线精品 | 色综合天天狠天天透天天伊人 | 99精品视频免费全部在线 | 91成人网页版 | 区一区二在线 | a在线免费 | 九九热免费视频在线观看 | 国产精品九九热 | 天天操天天操天天 | 久久免费视频1 | 99久久这里有精品 | 蜜臀av性久久久久av蜜臀妖精 | 精品视频在线播放 | 九九久久电影 | 精品国产黄色片 | 国产免费观看高清完整版 | 美女国内精品自产拍在线播放 | 日韩系列 | 国产精品福利av | 成人网444ppp| 91九色蝌蚪国产 | avsex| 天天干天天看 | 久久久久久久久久网站 | 99久久久久| 日韩精品视频在线免费观看 | 久久精品99久久 | 亚洲精品在线播放视频 | 成人啊 v | 九九久久精品视频 | 久久综合色一综合色88 | 在线亚洲高清视频 | 亚洲视频久久久久 | 正在播放国产一区二区 | v片在线播放 | 免费成人在线视频网站 | 久久亚洲日本 | .国产精品成人自产拍在线观看6 | 三级动图 | 高清av在线 | 亚洲免费视频在线观看 | 国产美女免费视频 | 亚洲区精品 | 精品亚洲欧美一区 | 欧美成人精品三级在线观看播放 | 亚洲综合视频在线 | 久久精品视频国产 | 日韩有码欧美 | 日韩videos高潮hd | 亚洲精品www | 91亚洲精品乱码久久久久久蜜桃 | 久久精品国产第一区二区三区 | 亚洲成人资源 | 伊人热 | 在线视频 亚洲 | 在线黄色免费av | 国产日韩精品一区二区 | 天天射天天色天天干 | 黄色福利视频网站 | 欧美一级片免费 | 久久激情久久 | av日韩在线网站 | 国产精品乱码在线 | 国产视频 亚洲精品 | av在线网站观看 | 国产色在线,com | 天天操比 | 九九热精品在线 | 开心色插 | 国产日韩欧美视频在线观看 | 激情综合站 | 色婷婷在线视频 | 免费久久网站 | 久草在线免费看视频 | 视频成人 | 国产护士hd高朝护士1 | 91麻豆免费版 | 91最新在线 | 粉嫩av一区二区三区四区在线观看 | 久久久久久久久久久久久9999 | 久草在线观看 | 国产 成人 久久 | 青青河边草免费观看完整版高清 | 国产亚洲欧美在线视频 | 国产美女精品久久久 | 在线 视频 亚洲 | 中日韩在线视频 | 亚州人成在线播放 | 中文字幕免费高清在线观看 | 日韩欧美在线视频一区二区三区 | 美女视频黄网站 | 国产成人一区二区在线观看 | 一区二区亚洲精品 | 欧美精品久久久久久 | av一区二区在线观看中文字幕 | 欧美不卡视频在线 | 久久久久久久久久久久久9999 | 欧美日韩精品在线免费观看 | 日韩av影视在线观看 | 夜夜视频 | 国产福利一区二区在线 | 九九热只有精品 | 亚洲国产中文字幕 | 黄色网在线免费观看 | 97超碰在线久草超碰在线观看 | 成人国产一区 | 国产不卡在线播放 | 天天操导航 | 亚洲区视频在线观看 | 99在线观看免费视频精品观看 | 久久日韩精品 | 视频直播国产精品 | 干干操操| 日韩高清黄色 | 九七视频在线观看 | 欧美亚洲xxx | 久久久免费毛片 | 美女一区网站 | 精品一区二区三区香蕉蜜桃 | 中文乱幕日产无线码1区 | 成年人av在线播放 | 一区二区欧美日韩 | 成人免费看片网址 | 久久婷综合 | 国产精品国产三级国产不产一地 | 国产高清视频免费最新在线 | 久久99精品久久久久久清纯直播 | 久久精品视频2 | 色综合天天综合 | 精品免费视频. | 精品国产一二三 | 久久综合九色综合97_ 久久久 | 麻豆精品视频在线 | 日韩av高潮 | 国产亚州精品视频 | 免费观看av| www.黄色片.com | 日本在线h | 成人免费视频观看 | 在线а√天堂中文官网 | 国产黄色精品网站 | 日韩亚洲国产精品 | 97超碰免费在线观看 | 欧美一级性 | 亚洲最大成人网4388xx | 欧美日韩高清一区二区三区 | 五月婷婷在线视频观看 | 日韩不卡高清视频 | 国产成人精品亚洲精品 | 亚洲一区二区三区四区精品 | 中文字幕在线观看视频网站 | 99久久精品无码一区二区毛片 | 五月天婷婷在线视频 | 国产精品日韩久久久久 | 久久高清 | 国产正在播放 | 亚洲一区精品人人爽人人躁 | 久久综合久久鬼 | 亚洲国产片 | 粉嫩av一区二区三区四区 | 国产在线不卡 | 国产在线观看你懂的 | 欧美日韩视频网站 | 国产免码va在线观看免费 | 激情 亚洲| 成人精品一区二区三区电影免费 | 久久天堂影院 | 欧美一区二区精美视频 | 又粗又长又大又爽又黄少妇毛片 | 久久伊人爱 | 欧美日韩精品在线观看 | 久久久久北条麻妃免费看 | 国产亚洲精品久久19p | 色婷婷视频| 国产91在线 | 美洲 | 欧美激情亚洲综合 | 免费高清看电视网站 | 国产精品麻豆果冻传媒在线播放 | 亚洲另类人人澡 | 很污的网站 | 国产91免费观看 | 中文字幕色播 | 五月婷婷婷婷婷 | 一级黄毛片 | 中国一级片免费看 | 这里只有精品视频在线观看 | 天天操天天干天天玩 | 亚洲精品中文字幕在线观看 | av黄网站 | 亚洲精品在线观看网站 | 日韩免费在线看 | 亚洲人人av | 国产区 在线 | 国产精品久久久久久一二三四五 | www.99久久.com | 色综合天天狠天天透天天伊人 | 97色婷婷人人爽人人 | 一级特黄aaa大片在线观看 | 成人免费大片黄在线播放 | 成人久久视频 | 国产视频在线观看一区二区 | 成全在线视频免费观看 | 日韩在线观看一区二区三区 | 黄在线 | 国产v亚洲v | 国产成人久 | 久久久久福利视频 | 少妇bbw揉bbb欧美 | 日韩视频在线观看视频 | 91av福利视频 | 天天射射天天 | 日韩精品中文字幕有码 | 亚洲国产精品久久久久婷婷884 | 国产精品久久久久久久久久久免费 | 国产免费一区二区三区网站免费 | 欧美激情综合色 | 亚洲国产免费看 | 国产精品av在线免费观看 | 精品国产aⅴ麻豆 | 精品资源在线 | 久久免费视频观看 | 69精品在线观看 | 99国产情侣在线播放 | 国产午夜精品理论片在线 | 久久精品久久综合 | 欧美日韩国产色综合一二三四 | av九九九| 免费黄色av片 | 久久九九影院 | 久久精品国产免费观看 | 色综合久久久久网 | 欧美成人在线免费观看 | 亚洲精品乱码白浆高清久久久久久 | 午夜视频福利 | av中文字幕剧情 | 综合天天| 色综合天天综合网国产成人网 | 人人舔人人爽 |