3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【APUE】Chapter17 Advanced IPC sign extension 结构体内存对齐

發(fā)布時間:2025/3/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【APUE】Chapter17 Advanced IPC sign extension 结构体内存对齐 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

17.1 Introduction

這一章主要講了UNIX Domain Sockets這樣的進(jìn)程間通訊方式,并列舉了具體的幾個例子。

?

17.2 UNIX Domain Sockets

這是一種特殊socket類型,主要用于高效的IPC,特點主要在于高效(因為省去了很多與數(shù)據(jù)無關(guān)的格式的要求)。

int socketpair(int?domain, int?type, int?protocol, int?sockfd[2]) 這個函數(shù)用于構(gòu)建一對unix domain sockets;并且與之前的pipe函數(shù)不同,這里構(gòu)建fd都是full-duplex的。

下面列舉一個poll + message queue + 多線程 的例子。

為什么要舉上面的例子?因為沒辦法直接用poll去管理多個message queue。

message queue在unix系統(tǒng)中有兩種標(biāo)示方法:1. 全局用一個key 2. 進(jìn)程內(nèi)部用一個identifier

而poll關(guān)注的對象只能是file descriptor;所以,用unix domain sockets作為二者的橋梁。

例子包含兩個部分,reciver端和sender端。

reciver掛起來幾個message queue,每個queue單獨開一個線程去處理;主線程跟每個queue線程的關(guān)聯(lián)方式就是unix domain sockets。代碼如下:

1 #include "../apue.3e/include/apue.h" 2 #include <sys/poll.h> 3 #include <pthread.h> 4 #include <sys/msg.h> 5 #include <sys/socket.h> 6 7 #define NQ 3 8 #define MAXMSZ 512 9 #define KEY 0x123 10 11 struct threadinfo{ 12 int qid; 13 int fd; 14 }; 15 16 struct mymesg{ 17 long mtype; 18 char mtext[MAXMSZ]; 19 }; 20 21 void * helper(void *arg) 22 { 23 int n; 24 struct mymesg m; 25 struct threadinfo *tip = arg; 26 27 for(; ;) 28 { 29 memset(&m, 0, sizeof(m)); 30 if ((n = msgrcv(tip->qid, &m, MAXMSZ, 0, MSG_NOERROR))<0) { 31 err_sys("msgrcv error"); 32 } 33 /*來自一個消息隊列的內(nèi)容 就特定的file desrciptor中*/ 34 if (write(tip->fd, m.mtext, n)<0) { 35 err_sys("write error"); 36 } 37 } 38 } 39 40 int main(int argc, char *argv[]) 41 { 42 int i, n, err; 43 int fd[2]; 44 int qid[NQ]; /*message queue在process內(nèi)部的identifier*/ 45 struct pollfd pfd[NQ]; 46 struct threadinfo ti[NQ]; 47 pthread_t tid[NQ]; 48 char buf[MAXMSZ]; 49 50 /*給每個消息隊列設(shè)定處理線程*/ 51 for (i=0; i<NQ; i++) { 52 /*返回消息隊列的identifier 類似file descriptor*/ 53 if ((qid[i] = msgget((KEY+i), IPC_CREAT|0666))<0) { 54 err_sys("msgget error"); 55 } 56 printf("queue ID %d is %d\n", i, qid[i]); 57 /*構(gòu)建unix domain sockets*/ 58 if (socketpair(AF_UNIX, SOCK_DGRAM, 0, fd)<0) { 59 err_sys("socketpair error"); 60 } 61 pfd[i].fd = fd[0]; /*main線程把住fd[0]這頭*/ 62 pfd[i].events = POLLIN; /*有data要去讀*/ 63 /* qid[i]在同一個process都可以用來表示同一個message queue */ 64 ti[i].qid = qid[i]; /*在每個線程中記錄要處理的消息隊列的id*/ 65 ti[i].fd = fd[1]; /*每個隊列的線程把住fd[1]這頭*/ 66 /*為每個消息隊列創(chuàng)建一個處理線程 并將對應(yīng)的threadinfo參數(shù)傳入線程*/ 67 if ((err = pthread_create(&tid[i], NULL, helper, &ti[i]))!=0) { 68 err_exit(err, "pthread_create error"); 69 } 70 } 71 72 for (;;) { 73 /*一直輪詢著 直到有隊列可以等待了 再執(zhí)行*/ 74 if (poll(pfd, NQ, -1)<0) { 75 err_sys("poll error"); 76 } 77 /*由于能進(jìn)行到這里 則一定是有隊列ready了 找到所有ready的隊列*/ 78 for (i=0; i<NQ; i++) { 79 if (pfd[i].revents & POLLIN) { /*挑出來所有滿足POLLIN條件的*/ 80 if ((n=read(pfd[i].fd, buf, sizeof(buf)))<0) { 81 err_sys("read error"); 82 } 83 buf[n] = 0; /* 這個末尾賦'\0'是必要的 因為接下來要執(zhí)行printf*/ 84 printf("queue id %d, message %s\n",qid[i],buf); 85 } 86 } 87 } 88 exit(0); 89 }

sender端,用command-line argument的方式讀入message的外部key,以及寫入message queue的數(shù)據(jù),具體代碼如下:

#include "../apue.3e/include/apue.h" #include <sys/msg.h>#define MAXMSZ 512struct mymesg{long mtype;char mtext[MAXMSZ]; };int main(int argc, char *argv[]) {key_t key;long qid;size_t nbytes;struct mymesg m;if (argc != 3) {fprintf(stderr, "usage: sendmsg KEY message\n");exit(1);}key = strtol(argv[1], NULL, 0);if ((qid = msgget(key,0))<0) {err_sys("can't open queue key %s", argv[1]);}memset(&m, 0, sizeof(m));strncpy(m.mtext, argv[2], MAXMSZ-1);nbytes = strlen(m.mtext);m.mtype = 1;if (msgsnd(qid, &m, nbytes, 0)<0) {err_sys("can't send message");}exit(0); }

執(zhí)行結(jié)果如下:

分析:

(1)unix socket domain在上述代碼中的好處主要是方便了多個message queue的管理

(2)引入unix socket domain雖然帶來了方便,但也在reciver中引入了兩次額外的cost:一個是line34的write,向unix domain socket多寫了一次;一個是line80的read,從unix domain socket多讀了一次。如果這種cost在可接受范圍內(nèi),那么unix socket domain就可以應(yīng)用。

?

17.2.1 Naming UNIX Domain Sockets

上面介紹的這種socketpair的方式構(gòu)造unix domain sockets,輸出是幾個fd,因此只能用于有親屬關(guān)系的process中。

如果要unrelated process之間用unix domain sockets通信,得從外面process能找到這個unix domain socket。

struct sockaddr_un{

  sa_family_t sun_family; ?/*AF_UNIX*/

  char sun_path[108]; ?/*pathname*/

}

這個結(jié)構(gòu)體可以用來被構(gòu)造成一個“可以被外面process找到的”的unix domain socket的地址,類似于“ip+port”的作用

具體需要如下三個步驟的操作:

1)fd = socket(AF_UNIX, SOCK_STREAM, 0) // 產(chǎn)生unix domain socket

2)un.sun_family = AF_UNIX?strcpy(un.sun_path, pathname)

3)bind(fd, (struct sockaddr *)&un, size) ?// 將unix domain socket與fd綁定

另,這里的pathname需要是一個獨一無二的文件名。后面的一系列內(nèi)容,都把sockaddr_un按照ip+port進(jìn)行理解就順暢了

有了結(jié)構(gòu)體中sun_path這個文件名,這個unix domain socket就有了自己獨一無二的標(biāo)識,其他進(jìn)程就可以通過這個標(biāo)識找到它。

1 #include "../apue.3e/include/apue.h" 2 #include <sys/socket.h> 3 #include <sys/un.h> 4 #include <string.h> 5 6 int main(int argc, char *argv[]) 7 { 8 int fd, size; 9 struct sockaddr_un un; 10 11 un.sun_family = AF_UNIX; 12 memset(un.sun_path, 0, sizeof(un.sun_path)); 13 strcpy(un.sun_path, "foo.socket"); 14 15 if ((fd = socket(AF_UNIX, SOCK_STREAM, 0))<0) { 16 err_sys("socket fail"); 17 } 18 size = offsetof(struct sockaddr_un, sun_path) + strlen(un.sun_path); 19 if (bind(fd, (struct sockaddr *)&un, size)<0) { 20 err_sys("bind failed"); 21 } 22 printf("UNIX domain socket bound\n"); 23 exit(0); 24 }

這里“foo.socket"不需要事先真的存在,它只需要是一個獨特的名稱就可以了。

執(zhí)行結(jié)果如下:

程序執(zhí)行的當(dāng)前文件夾下是沒有foo.socket這個文件的

執(zhí)行如上程序:

可以看到執(zhí)行完程序后:

(1)foo.socket這個文件自動生成了,而且文件類型是socket(srwxrwxr-x中的s)

(2)如果foo.socket已經(jīng)被占用了是沒辦法再綁定其他的unix domain socket的

?

17.3 Unique Connections

基于17.2.1的naming unix domain socket技術(shù),就可以針對unix domain socket展開listen, accept, connect等一些列用于network socket的操作;用這樣的方式來實現(xiàn)同一個host內(nèi)部的IPC。

具體的示意圖,如下所示:

apue中分別給出了listen accept connect三個函數(shù)的unix domain socket版。

int serv_listen(const char *name);

int serv_accpet(int listenfd, uid_t *uidptr);

int cli_conn(const char *name);

具體實現(xiàn)如下:

serv_listen函數(shù)(返回一個unix domain socket專門用于監(jiān)聽client發(fā)送來的請求)

1 #include "../apue.3e/include/apue.h" 2 #include <sys/socket.h> 3 #include <sys/un.h> 4 #include <errno.h> 5 6 #define QLEN 10 7 8 /*只要傳入一個well known name 就可返回fd*/ 9 int serv_listen(const char *name) 10 { 11 int fd; 12 int len; 13 int err; 14 int rval; 15 struct sockaddr_un un; 16 17 /*對name的長度上限有要求*/ 18 if (strlen(name) >= sizeof(un.sun_path)) { 19 errno = ENAMETOOLONG; 20 return -1; 21 } 22 /*這里創(chuàng)建的方式是SOCK_STREAM*/ 23 if ((fd = socket(AF_UNIX, SOCK_STREAM, 0))<0) { 24 return -2; 25 } 26 /*防止name已經(jīng)被占用了 這是一種排他的做法*/ 27 unlink(name); 28 /*初始化socket address structure*/ 29 memset(&un, 0, sizeof(un.sun_path)); 30 un.sun_family = AF_UNIX; 31 strcpy(un.sun_path, name); 32 len = offsetof(struct sockaddr_un, sun_path) + strlen(name); 33 /*執(zhí)行bind操作 因為有name所以可以綁定*/ 34 if (bind(fd, (struct sockaddr *)&un, len)<0) { 35 rval = -3; 36 goto errout; 37 } 38 /*執(zhí)行l(wèi)isten的操作 并設(shè)置等待隊列的長度*/ 39 if (listen(fd, QLEN)<0) { 40 rval = -4; 41 goto errout; 42 } 43 return fd; 44 errout: 45 err = errno; 46 close(fd); 47 errno = err; 48 return rval; 49 }

serv_accpet函數(shù)(這里有一點沒看懂 為什么client's name有30s的限制)

1 #include "../apue.3e/include/apue.h" 2 #include <sys/socket.h> 3 #include <sys/un.h> 4 #include <time.h> 5 #include <errno.h> 6 7 #define STALE 30 /*client's name can't be older than this sec*/ 8 9 int serv_accept(int listenfd, uid_t *uidptr) 10 { 11 int clifd; 12 int err; 13 int rval; 14 socklen_t len; 15 time_t staletime; 16 struct sockaddr_un un; 17 struct stat statbuf; 18 char *name; /*name中存放的是發(fā)起請求的client的地址信息*/ 19 20 /*因為sizeof不計算結(jié)尾的\0 所以在計算分配內(nèi)存的時候要考慮進(jìn)來*/ 21 if ((name = malloc(sizeof(un.sun_path+1)))==NULL) { 22 return -1; 23 } 24 len = sizeof(un); 25 /*就在這里阻塞著 等著client端發(fā)送來請求*/ 26 if ((clifd = accept(listenfd, (struct sockaddr *)&un, &len))<0) { 27 free(name); 28 return -2; 29 } 30 /*再讓len為path的實際長度 并存到name中*/ 31 len -= offsetof(struct sockaddr_un, sun_path); 32 memcpy(name, un.sun_path, len); 33 name[len] = 0; /*最后補(bǔ)上\0*/ 34 if (stat(name, &statbuf)<0) { /*讓statbuf獲得client關(guān)聯(lián)的文件的status*/ 35 rval = -3; 36 goto errout; 37 } 38 39 /*1. 驗證與client端關(guān)聯(lián)的文件類型是不是socket file*/ 40 #ifdef S_ISSOCK 41 if (S_ISSOCK(statbuf.st_mode)==0) { 42 rval = -4; 43 goto errout; 44 } 45 #endif 46 /*2. 驗證與clinet端關(guān)聯(lián)的文件的權(quán)限*/ 47 /*G for group O for owner U for user */ 48 /*驗證permission只有user-read user-write user-execute*/ 49 /*注意 ||運算符的優(yōu)先級 要高于 !=運算符的優(yōu)先級*/ 50 if ((statbuf.st_mode & (S_IRWXG | S_IRWXO)) || 51 (statbuf.st_mode & S_IRWXU) != S_IRWXU) { 52 rval = -5; 53 goto errout; 54 } 55 /*3. 驗證與client端關(guān)聯(lián)的文件被創(chuàng)建的時間*/ 56 staletime = time(NULL) - STALE; /**/ 57 if (statbuf.st_atim < staletime || 58 statbuf.st_ctim < staletime || 59 statbuf.st_mtim < staletime) { 60 rval = -6; 61 goto errout; 62 } 63 if (uidptr != NULL) { 64 *uidptr = statbuf.st_uid; 65 } 66 unlink(name); 67 free(name); 68 return clifd; 69 70 errout: 71 err = errno; 72 close(clifd); 73 free(name); 74 errno = err; 75 return rval; 76 }

cli_conn

1 #include "../apue.3e/include/apue.h" 2 #include <sys/socket.h> 3 #include <sys/un.h> 4 #include <errno.h> 5 6 #define CLI_PATH "/var/tmp" /*客戶端標(biāo)示*/ 7 #define CLI_PERM S_IRWXU /*權(quán)限設(shè)置*/ 8 9 int cli_conn(const char *name) 10 { 11 int fd; 12 int len; 13 int err; 14 int rval; 15 struct sockaddr_un un, sun;// un代表client端 sun代表server端 16 int do_unlink = 0; 17 /*1. 驗證傳入的name是否合理 18 * 這個name是server的name 先校驗server name的長度 */ 19 if (strlen(name) >= sizeof(un.sun_path)) { 20 errno = ENAMETOOLONG; 21 return -1; 22 } 23 /*2. 構(gòu)建client端的fd 24 * 這個fd是client的專門發(fā)送請求的fd*/ 25 if ((fd = socket(AF_UNIX, SOCK_STREAM, 0))<0) { 26 return -1; 27 } 28 /*3. 構(gòu)建client端的地址*/ 29 /* 將文件名+進(jìn)程號共寫進(jìn)un.sun_path 并記錄長度 這里約定了path的格式*/ 30 memset(&un, 0, sizeof(un)); 31 un.sun_family = AF_UNIX; 32 sprintf(un.sun_path, "%s%05ld", CLI_PATH, (long)getpid()); 33 printf("file is %s\n", un.sun_path); 34 len = offsetof(struct sockaddr_un, sun_path) + strlen(un.sun_path); 35 /*4. 將構(gòu)建的fd與構(gòu)建的client端地址綁定*/ 36 unlink(un.sun_path); /*防止CLI_PATH+pid這個特殊的文件名已經(jīng)被占用了*/ 37 if (bind(fd, (struct sockaddr *)&un, len)<0) { 38 rval = -2; 39 goto errout; 40 } 41 /* 為什么要先綁定再設(shè)定權(quán)限?因為如果不能綁定 修改權(quán)限就是無用功*/ 42 if (chmod(un.sun_path, CLI_PERM)<0) { 43 rval = -3; 44 do_unlink = 1; 45 goto errout; 46 } 47 /*5. 告訴client通過name去找server*/ 48 /* 通過這個name這個key與'server'的process建立連接*/ 49 memset(&sun, 0 ,sizeof(sun)); 50 sun.sun_family = AF_UNIX; 51 strcpy(sun.sun_path, name); 52 len = offsetof(struct sockaddr_un, sun_path) + strlen(name); 53 if (connect(fd, (struct sockaddr *)&sun, len)<0) { 54 rval = -4; 55 do_unlink = 1; 56 goto errout; 57 } 58 return fd; 59 errout: 60 err = errno; 61 close(fd); 62 if (do_unlink) { 63 unlink(un.sun_path); 64 } 65 errno = err; 66 return raval; 67 }

?

?

17.4 Passing File Descriptors

在進(jìn)程間傳遞file descriptor是也是unix domain socket的一種強(qiáng)大的功能。文件打開的各種細(xì)節(jié),都隱藏在server端了。

至今在apue上已經(jīng)有三種進(jìn)程間的file descriptor的傳遞方式:

(1)figure3.8的情況,不同的process分別打開同一個file,每個process中的fd有各自的file table,這兩個fd基本沒有什么關(guān)系:

  

(2)figure8.2的情況,parent通過fork產(chǎn)生child,整個parent的memory layout都copy到child中,這兩個fd屬于不同的地址空間,但是值是相同的,并且共享同一個file table:

  

(3)17.4節(jié)的情況,通過unix domain socket的方式傳遞fd,這兩個fd屬于不同的地址空間,除了共享同一個file table沒有其他的不同:

  

這一部分還講了其他一些相關(guān)的結(jié)構(gòu)體內(nèi)容,這些細(xì)節(jié)為了看懂代碼而用,關(guān)鍵記住上面的三種fd方式就可以了。

apue這部分自己設(shè)定了一個protocol,設(shè)定通過unix domain socket傳遞fd的協(xié)議,這個協(xié)議的細(xì)節(jié)不用關(guān)注太多;重點看如何告訴系統(tǒng),發(fā)送的是一個fd。

利用unix domain socket發(fā)送和接收fd的代碼如下:

send_fd的代碼(如何告訴系統(tǒng)發(fā)送的是一個fd?先把struct cmsghdr cmptr設(shè)定好line43~45,將cmptr賦值給struct msghdr msg中的msg.msg_control,這樣系統(tǒng)就知道發(fā)送的是一個fd)

1 #include "../apue.3e/include/apue.h" 2 #include <bits/socket.h> 3 #include <sys/socket.h> 4 5 /* 由于不同系統(tǒng)對于cmsghdr的實現(xiàn)不同 CMSG_LEN這個宏就是計算cmsghdr+int 6 * 所需要的memory大小是多少 這樣動態(tài)分配內(nèi)存的時候才知道分配多少大小*/ 7 #define CONTROLLEN CMSG_LEN(sizeof(int)) 8 9 static struct cmsghdr *cmptr = NULL; 10 11 int send_fd(int fd, int fd_to_send) 12 { 13 struct iovec iov[1]; 14 struct msghdr msg; 15 char buf[2]; /*這是真正的協(xié)議頭的兩個特征bytes*/ 16 /*scatter read or gather write 具體參考14.6 17 * 具體到這里的情景比較簡單 因為iovec的長度只有1 相當(dāng)于就調(diào)用了一個write 18 * 但是Unix domain socket的格式要去必須是struct iovec這種數(shù)據(jù)格式*/ 19 iov[0].iov_base = buf; 20 iov[0].iov_len = 2; 21 msg.msg_iov = iov; 22 msg.msg_iovlen = 1; 23 msg.msg_name = NULL; 24 msg.msg_namelen = 0; 25 /*調(diào)用send_fd分兩種情況: 26 * 1. 正常調(diào)用傳遞fd, 則fd_to_send是大于零的 27 * 2. 在send_err中調(diào)用send_fd, 則fd_to_send表示的是errorcode*/ 28 if (fd_to_send<0) { 29 msg.msg_control = NULL; 30 msg.msg_controllen = 0; 31 buf[1] = -fd_to_send; /*出錯的fd_to_send都是負(fù)數(shù)*/ 32 if (buf[1] == 0) { /*這個protocol并不是完美的 如果fd_to_send 33 是-256 則沒有正數(shù)與其對應(yīng) 協(xié)議在這里特殊處理-1與-256都代表 errorcode 1*/ 34 buf[1] = 1; 35 } 36 } 37 else { 38 /*這里cmptr獲得的memory大小是由CMSG_LEN算出來的*/ 39 if (cmptr == NULL && (cmptr = malloc(CONTROLLEN)) == NULL ) { 40 return -1; 41 } 42 /*通過Unix domain socket發(fā)送fd 就如下設(shè)置*/ 43 cmptr->cmsg_level = SOL_SOCKET; 44 cmptr->cmsg_type = SCM_RIGHTS; 45 cmptr->cmsg_len = CONTROLLEN; 46 /*將cmptr融進(jìn)要發(fā)送的msg*/ 47 msg.msg_control = cmptr; 48 msg.msg_controllen = CONTROLLEN; 49 /*得搞清楚strut cmsghdr的結(jié)構(gòu) 50 * struct cmsghdr{ 51 * socklen_t cmsg_len; 52 * int cmsg_level; 53 * int cmsg_type; 54 * } 55 * // followed by the actual control message data 56 * CMSG_DATA做的事情就是在cmsghdr緊屁股后面放上'fd_to_send'這個內(nèi)容 57 * ubuntu系統(tǒng)上查看<sys/socket.h>文件中的這個宏的具體實現(xiàn) 58 * 這個宏的具體實現(xiàn)就是struct cmsghdr結(jié)構(gòu)體的指針+1, 然后將這個位置*/ 59 *(int *)CMSG_DATA(cmptr) = fd_to_send; 60 buf[1] = 0; 61 } 62 buf[0] = 0; /*這就是給recv_fd設(shè)定的null byte flag recv_fd()函數(shù)中就是靠這個位來判斷的*/ 63 /*這里校驗的sendmsg返回值是不是2 就是char buf[2]中的內(nèi)容 64 * struct msghdr msg中 只有msg_iov中的數(shù)據(jù)算是被校驗的內(nèi)容 65 * 而msg_control這樣的數(shù)據(jù) 都叫ancillary data 即輔助數(shù)據(jù) 66 * 輔助數(shù)據(jù)雖然也跟著發(fā)送出去了 但是不在sendmsg返回值的校驗標(biāo)準(zhǔn)中*/ 67 if (sendmsg(fd, &msg, 0)!=2) { 68 return -1; 69 } 70 return 0 71 }

接收端的代碼recv_fd如下(代碼不難理解,有個坑是line56是apue勘誤表中才修改過來,否則有問題;勘誤表的鏈接:http://www.apuebook.com/errata3e.html)

1 #include "open_fd.h" 2 #include <sys/socket.h> /* struct msghdr */ 3 4 /* size of control buffer to send/recv one file descriptor */ 5 #define CONTROLLEN CMSG_LEN(sizeof(int)) 6 7 static struct cmsghdr *cmptr = NULL; /* malloc'ed first time */ 8 9 /* 10 * Receive a file descriptor from a server process. Also, any data 11 * received is passed to (*userfunc)(STDERR_FILENO, buf, nbytes). 12 * We have a 2-byte protocol for receiving the fd from send_fd(). 13 */ 14 int 15 recv_fd(int fd, ssize_t (*userfunc)(int, const void *, size_t)) 16 { 17 int newfd, nr, status; 18 char *ptr; 19 char buf[MAXLINE]; 20 struct iovec iov[1]; 21 struct msghdr msg; 22 23 status = -1; 24 for ( ; ; ) { 25 iov[0].iov_base = buf; 26 iov[0].iov_len = sizeof(buf); 27 msg.msg_iov = iov; 28 msg.msg_iovlen = 1; 29 msg.msg_name = NULL; 30 msg.msg_namelen = 0; 31 if (cmptr == NULL && (cmptr = malloc(CONTROLLEN)) == NULL) 32 return(-1); 33 msg.msg_control = cmptr; 34 msg.msg_controllen = CONTROLLEN; 35 if ((nr = recvmsg(fd, &msg, 0)) < 0) { 36 err_ret("recvmsg error"); 37 return(-1); 38 } else if (nr == 0) { 39 err_ret("connection closed by server"); 40 return(-1); 41 } 42 43 /* 44 * See if this is the final data with null & status. Null 45 * is next to last byte of buffer; status byte is last byte. 46 * Zero status means there is a file descriptor to receive. 47 */ 48 for (ptr = buf; ptr < &buf[nr]; ) { 49 if (*ptr++ == 0) { 50 if (ptr != &buf[nr-1]) 51 err_dump("message format error"); 52 status = *ptr & 0xFF; /* prevent sign extension */ 53 if (status == 0) { 54 printf("msg.msg_controllen:%zu\n", msg.msg_controllen); 55 printf("CONTROLLEN:%zu\n", CONTROLLEN); 56 if (msg.msg_controllen < CONTROLLEN) 57 err_dump("status = 0 but no fd"); 58 newfd = *(int *)CMSG_DATA(cmptr); 59 } else { 60 newfd = -status; 61 } 62 nr -= 2; 63 } 64 } 65 if (nr > 0 && (*userfunc)(STDERR_FILENO, buf, nr) != nr) 66 return(-1); 67 if (status >= 0) /* final data has arrived */ 68 return(newfd); /* descriptor, or -status */ 69 } 70 }

?

?

17.5 An Open Server, Version 1

這一節(jié)正是利用17.4中的passing file descriptor的技術(shù)來構(gòu)建一個"open" server:

這個server專門用來接收client發(fā)送的請求(即打開哪個文件,怎么打開),然后在server端把文件打開,再利用unix domain socket的技術(shù)把file descriptor給傳遞過去。

具體用到的技術(shù)就是client運行起來,通過fork+execl的方式調(diào)用opend(相當(dāng)于server端的程序),并且通過socketpair的方式建立進(jìn)程間的通信。

將書上的代碼整理了一下(main.c表示client端,maind.c表示server端,lib文件夾中包含用到的一些函數(shù),include文件夾中的.h文件包括各種公用的lib)

main.c代碼如下:

1 #include "open_fd.h" 2 #include <fcntl.h> 3 #include <sys/uio.h> 4 5 #define BUFFSIZE 8192 6 #define CL_OPEN "open" // client's request for server 7 8 int csopen(char *name, int oflag) 9 { 10 pid_t pid; 11 int len; 12 char buf[10]; 13 struct iovec iov[3]; 14 static int fd[2] = {-1, -1}; 15 /*首次需要建立child parent的鏈接*/ 16 if (fd[0] < 0) { 17 printf("frist time build up fd_pipe\n"); 18 /*構(gòu)建一個全雙工的pipe*/ 19 if (fd_pipe(fd) < 0) { 20 err_ret("fd_pipe error"); 21 return -1; 22 } 23 printf("fd[0]:%d,fd[1]:%d\n",fd[0],fd[1]); 24 if((pid = fork())<0){ 25 err_ret("fork error"); 26 return -1; 27 } 28 else if (pid ==0) { /*child*/ 29 close(fd[0]); 30 /*這個地方需要注意 這種full-duplex的fd 可以把in和out都掛到這個fd上面 之前只掛了stdin沒有掛out所以有問題*/ 31 /*將child的stdin 銜接到fd[1]上面*/ 32 if (fd[1] != STDIN_FILENO && dup2(fd[1],STDIN_FILENO)!=STDIN_FILENO) { 33 err_sys("dup2 error to stdin"); 34 } 35 /*將child的stdout 銜接到fd[1]上面*/ 36 if (fd[1] != STDOUT_FILENO && dup2(fd[1],STDOUT_FILENO)!=STDOUT_FILENO) { 37 err_sys("dup2 error to stdout"); 38 } 39 /*執(zhí)行opend這個程序 這時opend這個程序的stdin就指向fd[1] child和parent通過pipe連接了起來*/ 40 if (execl("./opend", "opend", (char *)0)<0) { 41 err_sys("execl error"); 42 } 43 } 44 close(fd[1]); /*parent*/ 45 } 46 47 /*iov三個char array合成一個char array 每個array以空格分開*/ 48 sprintf(buf, " %d", oflag); 49 iov[0].iov_base = CL_OPEN " "; /* string concatenation */ 50 iov[0].iov_len = strlen(CL_OPEN) + 1; 51 iov[1].iov_base = name; /*傳入的filename在中間的io*/ 52 iov[1].iov_len = strlen(name); 53 iov[2].iov_base = buf; 54 iov[2].iov_len = strlen(buf) + 1; /* +1 for null at end of buf */ 55 len = iov[0].iov_len + iov[1].iov_len + iov[2].iov_len; 56 /*通過fd[0] fd[1]這個通道 由client向server發(fā)送數(shù)據(jù)*/ 57 /*writev在會把緩沖區(qū)的輸出數(shù)據(jù)按順序集合到一起 再發(fā)送出去*/ 58 if (writev(fd[0], &iov[0], 3) != len) { 59 err_ret("writev error"); 60 return(-1); 61 } 62 /* read descriptor, returned errors handled by write() */ 63 return recv_fd(fd[0], write); 64 } 65 66 /*這是client端調(diào)用的程序*/ 67 int main(int argc, char *argv[]) 68 { 69 int n, fd; 70 char buf[BUFFSIZE], line[MAXLINE]; 71 /*每次從stdin cat進(jìn)來filename*/ 72 while (fgets(line, MAXLINE, stdin)!=NULL) { 73 /*替換把回車替換掉*/ 74 if (line[strlen(line)-1] == '\n') { 75 line[strlen(line)-1] = 0; 76 } 77 /*打開文件*/ 78 if ((fd = csopen(line, O_RDONLY))<0) { 79 continue; 80 } 81 /*把fd這個文件讀寫完成*/ 82 printf("fd obtained from other process : %d\n",fd); 83 while ((n = read(fd, buf, BUFFSIZE))>0) { 84 if (write(STDOUT_FILENO, buf, n)!= n) { 85 err_sys("write error"); 86 } 87 } 88 if (n<0) { 89 err_sys("read error"); 90 } 91 close(fd); 92 } 93 exit(0); 94 }

maind.c的代碼如下:

1 #include <errno.h> 2 #include <fcntl.h> 3 #include "open_fd.h" 4 5 #define CL_OPEN "open" 6 #define MAXARGC 50 7 #define WHITE " \t\n" 8 9 char errmsg[MAXLINE]; 10 int oflag; 11 char *pathname; 12 13 /* cli_args和buf_args兩個函數(shù)起到把讀進(jìn)來的buf解析的功能 14 * 了解大體功能即可 不用細(xì)看*/ 15 16 int cli_args(int argc, char **argv) 17 { 18 if (argc != 3 || strcmp(argv[0], CL_OPEN) != 0) { 19 strcpy(errmsg, "usage: <pathname> <oflag>\n"); 20 return(-1); 21 } 22 pathname = argv[1]; /* save ptr to pathname to open */ 23 oflag = atoi(argv[2]); 24 return(0); 25 } 26 27 int buf_args(char *buf, int (*optfunc)(int, char **)) 28 { 29 char *ptr, *argv[MAXARGC]; 30 int argc; 31 32 if (strtok(buf, WHITE) == NULL) /* an argv[0] is required */ 33 return(-1); 34 argv[argc = 0] = buf; 35 while ((ptr = strtok(NULL, WHITE)) != NULL) { 36 if (++argc >= MAXARGC-1) /* -1 for room for NULL at end */ 37 return(-1); 38 argv[argc] = ptr; 39 } 40 argv[++argc] = NULL; 41 42 /* 43 * Since argv[] pointers point into the user's buf[], 44 * user's function can just copy the pointers, even 45 * though argv[] array will disappear on return. 46 */ 47 return((*optfunc)(argc, argv)); 48 } 49 50 void handle_request(char *buf, int nread, int fd) 51 { 52 int newfd; 53 if (buf[nread-1] != 0) { 54 send_err(fd, -1, errmsg); 55 return; 56 } 57 if (buf_args(buf, cli_args) < 0) { /* parse args & set options */ 58 send_err(fd, -1, errmsg); 59 return; 60 } 61 if ((newfd = open(pathname, oflag)) < 0) { 62 send_err(fd, -1, errmsg); 63 return; 64 } 65 if (send_fd(fd, newfd) < 0) /* send the descriptor */ 66 err_sys("send_fd error"); 67 close(newfd); /* we're done with descriptor */ 68 } 69 70 /*server端*/ 71 int main(void) 72 { 73 int nread; 74 char buf[MAXLINE]; 75 for (; ; ){ 76 /*一直阻塞著 等著stdin讀數(shù)據(jù)*/ 77 if ((nread = read(STDIN_FILENO, buf, MAXLINE))<0) { 78 err_sys("read error on stream pipe"); 79 } 80 else if (nread == 0) { 81 break; 82 } 83 handle_request(buf, nread, STDOUT_FILENO); 84 } 85 exit(0); 86 }

其余l(xiāng)ib和include中的代碼有的是apue書上這個章節(jié)的,有的是apue源代碼提供的lib,這些不再贅述了。

直接看運行結(jié)果(在當(dāng)前文件夾下面設(shè)定了一個xbf的文本文件,流程是讓client發(fā)送以只讀方式打開這個文件的請求,由server打開這個文件,然后再將fd返回)

先得注意msg.msg_controllen與CONTROLLEN是不等的,這是原書勘誤表中的一個bug。

server中打開的xbf文件的fd就是存在了msg這個結(jié)構(gòu)體的最后的位置發(fā)送過來的。

如果將main.c中的line91注釋掉,結(jié)果如下:

可以看到,真正client接收到的fd的值,與server端發(fā)送時候的fd的值是沒有關(guān)系的,只是client端哪個最小的fd的值可用,就會用這個fd的值對應(yīng)上server打開的xbf這個文件。

總結(jié)一下,流程是這樣的:

(1)server打開xbf文件 →

(2)server將與xbf文件對應(yīng)的fd掛到cmsghdr的最后 →

(3)server通過fd_pipe產(chǎn)生的unix domain socket將msghdr發(fā)送到client端 →

(4)在發(fā)送的過程中kernel記錄的應(yīng)該是這個fd對應(yīng)的file table信息 →

(5)在client接收到這個file table時候,kernel分配一個client端可用的最小fd →

(6)client端獲得了一個fd并且這個fd已經(jīng)指向開打的xbf文件

其余的具體protocol不用細(xì)看,但是一些技術(shù)細(xì)節(jié)后面再單獨記錄。

?

17.6 An Open Server Version 2

這里主要用到的是naming unix domain socket的技術(shù),為的是可以在unrelated process之間傳遞file descriptor。

理解這個部分的重點是書上17.29和17.30兩個loop函數(shù)的實現(xiàn):一個用的是select函數(shù),一個用的是poll函數(shù)。(還需要熟悉守護(hù)進(jìn)程的知識以及command-line argument的解析的套路)

要想迅速串起來這部分的代碼,還得回顧一下select和poll函數(shù),這二者的輸入?yún)?shù)中都有value-on return類型的,先理解好輸入?yún)?shù)。

loop.select.c代碼如下:

1 #include "opend.h" 2 #include <sys/select.h> 3 4 void 5 loop(void) 6 { 7 int i, n, maxfd, maxi, listenfd, clifd, nread; 8 char buf[MAXLINE]; 9 uid_t uid; 10 fd_set rset, allset; 11 12 /* 與poll的用法不同 這里喂給select的fd_set是不預(yù)先設(shè)定大小的 13 * 而是靠maxfd來標(biāo)定大小*/ 14 FD_ZERO(&allset); 15 /* obtain fd to listen for client requests on */ 16 if ((listenfd = serv_listen(CS_OPEN)) < 0) 17 log_sys("serv_listen error"); 18 /* 將server這個用于監(jiān)聽的fd加入集合*/ 19 FD_SET(listenfd, &allset); 20 /* 需要監(jiān)聽的最大的fd就是剛剛分配的listenfd*/ 21 maxfd = listenfd; 22 maxi = -1; 23 24 for ( ; ; ) { 25 rset = allset; /* rset gets modified each time around */ 26 /* select中的&rset這個參數(shù) 返回的時候只保留ready的fd*/ 27 if ((n = select(maxfd + 1, &rset, NULL, NULL, NULL)) < 0) 28 log_sys("select error"); 29 /* 處理有client發(fā)送請求的case*/ 30 if (FD_ISSET(listenfd, &rset)) { 31 /* accept new client request */ 32 if ((clifd = serv_accept(listenfd, &uid)) < 0) 33 log_sys("serv_accept error: %d", clifd); 34 i = client_add(clifd, uid); 35 FD_SET(clifd, &allset); /*A 向allset中增加需要監(jiān)聽的內(nèi)容*/ 36 if (clifd > maxfd) /* 更新select監(jiān)控的最大的fd大小*/ 37 maxfd = clifd; /* max fd for select() */ 38 if (i > maxi) /* 更新Client array的大小*/ 39 maxi = i; /* max index in client[] array */ 40 log_msg("new connection: uid %d, fd %d", uid, clifd); 41 continue; 42 } 43 /* 沒有新的client 處理Client array中ready的client */ 44 for (i = 0; i <= maxi; i++) { /* go through client[] array */ 45 if ((clifd = client[i].fd) < 0) /*沒被占用的*/ 46 continue; 47 if (FD_ISSET(clifd, &rset)) { /*在監(jiān)聽的set中*/ 48 /* read argument buffer from client */ 49 if ((nread = read(clifd, buf, MAXLINE)) < 0) { 50 log_sys("read error on fd %d", clifd); 51 } else if (nread == 0) { /* nread=0表明client已經(jīng)關(guān)閉了*/ 52 log_msg("closed: uid %d, fd %d", 53 client[i].uid, clifd); 54 client_del(clifd); /* client has closed cxn */ 55 FD_CLR(clifd, &allset); /* B 從allset中刪除需要監(jiān)聽的內(nèi)容*/ 56 close(clifd); 57 } else { /* process client's request */ 58 handle_request(buf, nread, clifd, client[i].uid); 59 } 60 } 61 } 62 } 63 }

loop.pool.c的代碼如下:

#include "opend.h" #include <poll.h>#define NALLOC 10 /* # pollfd structs to alloc/realloc */static struct pollfd * grow_pollfd(struct pollfd *pfd, int *maxfd) {int i;int oldmax = *maxfd;int newmax = oldmax + NALLOC;if ((pfd = realloc(pfd, newmax * sizeof(struct pollfd))) == NULL)err_sys("realloc error");for (i = oldmax; i < newmax; i++) {pfd[i].fd = -1;pfd[i].events = POLLIN;pfd[i].revents = 0;}*maxfd = newmax;return(pfd); }void loop(void) {int i, listenfd, clifd, nread;char buf[MAXLINE];uid_t uid;struct pollfd *pollfd;int numfd = 1;int maxfd = NALLOC;/* 先分配10個fd槽 */if ((pollfd = malloc(NALLOC * sizeof(struct pollfd))) == NULL)err_sys("malloc error");for (i = 0; i < NALLOC; i++) {pollfd[i].fd = -1;pollfd[i].events = POLLIN; /*read*/pollfd[i].revents = 0;}/* obtain fd to listen for client requests on */if ((listenfd = serv_listen(CS_OPEN)) < 0)log_sys("serv_listen error");client_add(listenfd, 0); /* we use [0] for listenfd */pollfd[0].fd = listenfd;for ( ; ; ) {/* 這里控制的是numfd而不是maxfd*/if (poll(pollfd, numfd, -1) < 0)log_sys("poll error");/* 1. 先判斷是否有新的client請求 */if (pollfd[0].revents & POLLIN) {/* accept new client request */if ((clifd = serv_accept(listenfd, &uid)) < 0)log_sys("serv_accept error: %d", clifd);client_add(clifd, uid);/* possibly increase the size of the pollfd array *//* 如果Client array數(shù)量超過了pollfd的數(shù)量 就realloc*/if (numfd == maxfd)pollfd = grow_pollfd(pollfd, &maxfd);pollfd[numfd].fd = clifd;pollfd[numfd].events = POLLIN;pollfd[numfd].revents = 0;numfd++;log_msg("new connection: uid %d, fd %d", uid, clifd);/* 與select不同 這里沒有continue 而是可以直接向下進(jìn)行* 為什么可以直接向下進(jìn)行 而select就不可以* 因為poll使用pollfd來標(biāo)定需要等著的fd的* 每個struct pollfd中* a. 既有關(guān)心ready的事件* b. 又有真正ready的事件* 處理一個fd并不會影響其他fd的狀態(tài)*/}/* 2. 再判斷有哪些ready的client*/for (i = 1; i < numfd; i++) {if (pollfd[i].revents & POLLHUP) {goto hungup;} else if (pollfd[i].revents & POLLIN) {/* read argument buffer from client */if ((nread = read(pollfd[i].fd, buf, MAXLINE)) < 0) {log_sys("read error on fd %d", pollfd[i].fd);} else if (nread == 0) { hungup:/* the client closed the connection */log_msg("closed: uid %d, fd %d",client[i].uid, pollfd[i].fd);client_del(pollfd[i].fd);close(pollfd[i].fd);if (i < (numfd-1)) { /* 這個應(yīng)該是corner case的判斷*//* 這么做是為了節(jié)約空間* 把末端的fd及相關(guān)信息頂?shù)絠這個位置上 *//* pack the array */pollfd[i].fd = pollfd[numfd-1].fd;pollfd[i].events = pollfd[numfd-1].events;pollfd[i].revents = pollfd[numfd-1].revents;/* 由于把末位的頂?shù)絠這個位置上* 所以要再check一遍這個位置 */i--; /* recheck this entry */}numfd--;} else { /* process client's request */handle_request(buf, nread, pollfd[i].fd,client[i].uid);}}}} }

?

===================================分割線===================================

記錄幾個遇到的技術(shù)細(xì)節(jié)問題

1. sign extension的問題

上面recv_fd中的line54有一個不是很直觀的做法

int status;

char *ptr;

status = *ptr & 0xFF;

ptr是char類型,可以代表0~255的值,代表不同的返回狀態(tài)。比如*ptr為128的值用二進(jìn)制表示為1000000。

由于status是int類型占4bytes 32bits,如果直接status = *ptr,就涉及到位擴(kuò)展的問題,最高位到底是當(dāng)成符號位還是取值位呢?

(1)首先,char到底是有符號還是無符號的,取決于編譯器,見這篇文章(http://descent-incoming.blogspot.jp/2013/02/c-char-signed-unsigned.html)

(2)0xFF默認(rèn)是無符號int型,高位8都為0

因此,無論char是不是有符號的,一旦與0xFF做了與運算,則相當(dāng)于把char類型的最高位自動當(dāng)成了取值位了。就避免了上面提到的符號位擴(kuò)展的問題。

為了方便記憶,寫了一個小例子記錄這種sign extension帶來的影響:

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(int argc, char *argv[]) 5 { 6 /*驗證int的byte數(shù)目*/ 7 int status = -1; 8 char c1 = 254; /*默認(rèn)254是int類型占4bytes 轉(zhuǎn)換成char類型占1bytes 直接截取低8位*/ 9 unsigned char c2 = 254; 10 /*gcc編譯器 默認(rèn)的char是有符號的 因為直接從char轉(zhuǎn)換到int是用char的符號位補(bǔ)齊高位*/ 11 status = c1; 12 printf("status converted from c1 : %d\n", status); 13 /*如果是unsigned char是沒有符號位的 因此從unsigned char轉(zhuǎn)換到int是高位直接補(bǔ)0*/ 14 status = c2; 15 printf("status converted from c2 : %d\n", status); 16 /*驗證默認(rèn)的0xFF是4 bytes 32 bits的*/ 17 printf("size of defalut int : %ld\n", sizeof(0xFF)); 18 status = c1 & 0xFF; 19 printf("status converted from c1 & 0xFF : %d\n", status); 20 /*如果是1 byte 8 bits的int類型*/ 21 int8_t i8 = 0xFF; 22 status = c1 & i8; 23 printf("status converted from c1 & int8_t i8 : %d\n", status); 24 }

執(zhí)行結(jié)果如下:

上面的例子應(yīng)該可以包含絕大多數(shù)情況了。

這是當(dāng)時看過的一個不錯的資料:http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/signExt.html

?

2. sizeof與strelen的問題

http://www.cnblogs.com/carekee/articles/1630789.html

?

3. 結(jié)構(gòu)體內(nèi)存對齊問題

send_fd和recv_fd代碼中都用到了一個宏定義CMSG_LEN:查看這個宏在socket.h中的定義,引申出CMSG_ALIGN這個內(nèi)存對齊的宏定義。

(1)要想回顧C(jī)MSG_ALIGN怎么做到內(nèi)存對齊的,可以參考下面的blog:http://blog.csdn.net/duanlove/article/details/9948947

(2)要想理解為什么要進(jìn)行內(nèi)存對齊,可以參考下面的blog:http://www.cppblog.com/snailcong/archive/2009/03/16/76705.html

(3)從實操層面,學(xué)習(xí)如何計算結(jié)構(gòu)體的內(nèi)存對齊方法,可以參考下面的blog:http://blog.csdn.net/hairetz/article/details/4084088

把上面的內(nèi)容總結(jié)起來,可得結(jié)構(gòu)體內(nèi)存對齊如下的結(jié)論:

1 A元素是結(jié)構(gòu)體前面的元素 B元素是結(jié)構(gòu)體后面的元素,一般結(jié)構(gòu)體開始的偏移量是0,則:A元素必須讓B元素滿足 B元素的尋址偏移量是B元素size的整數(shù)倍大小 2 整個結(jié)構(gòu)的大小必須是其中最大字段大小的整數(shù)倍。 按照上面兩個原則 就大概能算出來常規(guī)套路下結(jié)構(gòu)體需要內(nèi)存對齊后的大小 最后還是自己寫一個例子,通過實操記憶一下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct str1{ 5 char a; 6 char b; 7 short c; 8 long d; 9 }; 10 11 struct str2{ 12 char a; 13 }; 14 15 int main(int argc, char *argv[]) 16 { 17 struct str2 s2; 18 struct str1 s1; 19 char *p; 20 char c; 21 short s; 22 long l; 23 24 printf("size of str2 : %ld\n", sizeof(struct str2)); 25 printf("addr of str2.a : %p\n", &s2.a); 26 printf("size of str1 : %ld\n", sizeof(struct str1)); 27 printf("addr of str1.a : %p\n", &s1.a); 28 printf("addr of str1.b : %p\n", &s1.b); 29 printf("addr of str1.c : %p\n", &s1.c); 30 printf("addr of str1.d : %p\n", &s1.d); 31 printf("addr of char pointer p : %p\n", &p); 32 printf("addr of char c : %p\n", &c); 33 printf("addr of long l : %p\n", &l); 34 printf("addr of short s : %p\n", &s); 35 }

運行結(jié)果如下:

分析:

(1)結(jié)構(gòu)體內(nèi)存對齊按照上面說的規(guī)律

(2)其余的變量內(nèi)存分配,并不是完全按照變量定義的順序,我的理解是按照變量的所占字節(jié)的大小,字節(jié)大的分配在高地址(stack地址分配由高向低生長),這樣有助于節(jié)約內(nèi)存空間,降低內(nèi)存對齊帶來的memory的浪費。

另,深入看了一下malloc函數(shù),果然malloc也是考慮了內(nèi)存對齊的問題的。

(1)man malloc可以看到如下的信息:

(2)這個blog專門講malloc考慮內(nèi)存對齊的內(nèi)存分配機(jī)制的:http://blog.csdn.net/elpmis/article/details/4500917

?

4. 對于char c = 0 和 char c = '\0'問題的解釋

二者本質(zhì)是一樣的,只是表述上有所區(qū)別,ascii碼'\0'的值就是0.

http://stackoverflow.com/questions/16955936/string-termination-char-c-0-vs-char-c-0

?

===================================分割線===================================

?

?

APUE這本書刷到這里也差不多了,后面兩章內(nèi)容不是很新暫時不刷了。

這本書看過一遍,感覺還是遠(yuǎn)遠(yuǎn)不夠,以后應(yīng)該常放在手邊翻閱。

轉(zhuǎn)載于:https://www.cnblogs.com/xbf9xbf/p/5121748.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的【APUE】Chapter17 Advanced IPC sign extension 结构体内存对齐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产午夜精品一区二区三区嫩草 | 暴力强奷在线播放无码 | 美女张开腿让人桶 | 欧美色就是色 | 亚洲精品久久久久久久久久久 | 色综合久久88色综合天天 | 国产精华av午夜在线观看 | 俄罗斯老熟妇色xxxx | 国产极品视觉盛宴 | 最近的中文字幕在线看视频 | 黑人玩弄人妻中文在线 | 欧美三级不卡在线观看 | 午夜福利电影 | 好男人www社区 | 久久精品中文闷骚内射 | 人人爽人人澡人人高潮 | 精品国产乱码久久久久乱码 | 人妻天天爽夜夜爽一区二区 | 精品国产麻豆免费人成网站 | 日本一区二区三区免费播放 | 国产一区二区不卡老阿姨 | 国产激情艳情在线看视频 | 7777奇米四色成人眼影 | 国产深夜福利视频在线 | 久久精品国产99久久6动漫 | 一二三四社区在线中文视频 | 国产疯狂伦交大片 | 亲嘴扒胸摸屁股激烈网站 | 国产xxx69麻豆国语对白 | 永久免费观看美女裸体的网站 | 国产精品亚洲综合色区韩国 | 亚洲成熟女人毛毛耸耸多 | 真人与拘做受免费视频一 | 国产色视频一区二区三区 | 亚洲精品中文字幕 | 亚洲色大成网站www国产 | 午夜无码人妻av大片色欲 | 玩弄人妻少妇500系列视频 | 国产精品怡红院永久免费 | 少妇高潮一区二区三区99 | 性欧美牲交在线视频 | 最近免费中文字幕中文高清百度 | 欧美激情综合亚洲一二区 | 欧美国产日韩久久mv | 久精品国产欧美亚洲色aⅴ大片 | 性色欲情网站iwww九文堂 | 久久精品女人天堂av免费观看 | 国产97色在线 | 免 | 欧美 日韩 人妻 高清 中文 | 九月婷婷人人澡人人添人人爽 | 亚洲区小说区激情区图片区 | 扒开双腿吃奶呻吟做受视频 | 乱人伦中文视频在线观看 | а√天堂www在线天堂小说 | 国产av一区二区三区最新精品 | 亚洲精品无码人妻无码 | 国产成人无码一二三区视频 | 中文字幕乱码亚洲无线三区 | 领导边摸边吃奶边做爽在线观看 | 99久久无码一区人妻 | 秋霞成人午夜鲁丝一区二区三区 | 黑人大群体交免费视频 | 日韩精品无码一本二本三本色 | 国内综合精品午夜久久资源 | 学生妹亚洲一区二区 | 99riav国产精品视频 | 黄网在线观看免费网站 | 亚洲日韩一区二区 | 久久综合色之久久综合 | 精品成人av一区二区三区 | 亚洲欧美中文字幕5发布 | 免费播放一区二区三区 | 全球成人中文在线 | 亚洲精品午夜国产va久久成人 | 在教室伦流澡到高潮hnp视频 | 中文字幕av伊人av无码av | 国产综合在线观看 | 黑人玩弄人妻中文在线 | 国产精品永久免费视频 | 亚洲成av人片天堂网无码】 | 日日鲁鲁鲁夜夜爽爽狠狠 | 六月丁香婷婷色狠狠久久 | 人人妻人人澡人人爽欧美一区九九 | 国产精品久久精品三级 | 亚洲色www成人永久网址 | 国产无套内射久久久国产 | 人妻无码久久精品人妻 | 51国偷自产一区二区三区 | 国产疯狂伦交大片 | 国产精品国产三级国产专播 | 东京一本一道一二三区 | 亚洲色偷偷偷综合网 | 精品无码一区二区三区爱欲 | 人妻无码αv中文字幕久久琪琪布 | 国产人妻精品一区二区三区不卡 | 无码av免费一区二区三区试看 | 荫蒂添的好舒服视频囗交 | 亚洲成av人在线观看网址 | 精品人妻中文字幕有码在线 | 欧美性生交xxxxx久久久 | 98国产精品综合一区二区三区 | 亚洲中文字幕在线无码一区二区 | 18黄暴禁片在线观看 | 国产精品a成v人在线播放 | 亚洲精品国产品国语在线观看 | 六十路熟妇乱子伦 | 国产猛烈高潮尖叫视频免费 | 国产成人精品无码播放 | 亚洲人成网站在线播放942 | 亚洲成a人片在线观看无码 | 国产av一区二区三区最新精品 | 国产精品va在线观看无码 | 国产精品资源一区二区 | 国产综合久久久久鬼色 | 九一九色国产 | 精品aⅴ一区二区三区 | 秋霞特色aa大片 | 中文无码成人免费视频在线观看 | 欧美35页视频在线观看 | 精品国产成人一区二区三区 | 又黄又爽又色的视频 | 少妇久久久久久人妻无码 | 一区二区三区高清视频一 | 国产精品久免费的黄网站 | 日本免费一区二区三区最新 | 十八禁视频网站在线观看 | av无码电影一区二区三区 | 麻花豆传媒剧国产免费mv在线 | 无码av免费一区二区三区试看 | 久久久成人毛片无码 | 少妇性荡欲午夜性开放视频剧场 | 国产另类ts人妖一区二区 | 国产成人综合美国十次 | 国产成人综合在线女婷五月99播放 | 亚洲第一无码av无码专区 | 天天燥日日燥 | 在线播放亚洲第一字幕 | 亚洲精品一区国产 | 在线天堂新版最新版在线8 | 婷婷综合久久中文字幕蜜桃三电影 | 樱花草在线社区www | 国产亚洲精品久久久闺蜜 | 麻花豆传媒剧国产免费mv在线 | 亚洲国产成人a精品不卡在线 | 四虎国产精品一区二区 | 高清不卡一区二区三区 | 中文字幕乱码中文乱码51精品 | 丝袜人妻一区二区三区 | 精品国精品国产自在久国产87 | 国产精品久久久久久久9999 | 性史性农村dvd毛片 | 国产性生大片免费观看性 | 97精品人妻一区二区三区香蕉 | 日本丰满熟妇videos | 国产精品无码一区二区桃花视频 | 男人的天堂av网站 | 啦啦啦www在线观看免费视频 | 国产精品第一国产精品 | 天天av天天av天天透 | 久久午夜夜伦鲁鲁片无码免费 | 日日天日日夜日日摸 | 久久亚洲精品成人无码 | 欧美 日韩 人妻 高清 中文 | 无遮无挡爽爽免费视频 | 激情亚洲一区国产精品 | 天堂亚洲2017在线观看 | 国产午夜精品一区二区三区嫩草 | 亚洲欧美国产精品专区久久 | 久久久久se色偷偷亚洲精品av | 国产国产精品人在线视 | √8天堂资源地址中文在线 | 久久久久亚洲精品中文字幕 | 国产精品人妻一区二区三区四 | 十八禁视频网站在线观看 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 久久精品国产亚洲精品 | 欧美国产日韩亚洲中文 | 无码帝国www无码专区色综合 | www国产亚洲精品久久网站 | 欧美变态另类xxxx | 日韩少妇内射免费播放 | 国产精品无套呻吟在线 | 日本护士xxxxhd少妇 | 无码精品人妻一区二区三区av | 国产成人一区二区三区在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 欧洲熟妇精品视频 | 女人色极品影院 | 爆乳一区二区三区无码 | 日韩精品无码一本二本三本色 | 男女超爽视频免费播放 | 性做久久久久久久免费看 | а√天堂www在线天堂小说 | 无码午夜成人1000部免费视频 | 丰满少妇弄高潮了www | 97精品国产97久久久久久免费 | 无码人妻久久一区二区三区不卡 | 丰满少妇弄高潮了www | 一本一道久久综合久久 | 正在播放老肥熟妇露脸 | 欧美乱妇无乱码大黄a片 | 九月婷婷人人澡人人添人人爽 | a在线观看免费网站大全 | 午夜熟女插插xx免费视频 | 色综合天天综合狠狠爱 | 性欧美大战久久久久久久 | 欧美日韩色另类综合 | 久久久久久久女国产乱让韩 | 亚洲欧美日韩综合久久久 | 少妇被黑人到高潮喷出白浆 | 国语精品一区二区三区 | 天堂亚洲2017在线观看 | 又粗又大又硬毛片免费看 | 国产特级毛片aaaaaa高潮流水 | 久久99热只有频精品8 | 国产成人无码av片在线观看不卡 | 亚洲国产精品久久久久久 | 久久精品国产日本波多野结衣 | 亚洲国产成人av在线观看 | 午夜精品久久久久久久久 | 国产亲子乱弄免费视频 | 亚洲va中文字幕无码久久不卡 | 欧美成人家庭影院 | 亚洲精品久久久久久久久久久 | 奇米影视888欧美在线观看 | 亚洲成a人片在线观看无码3d | 男女下面进入的视频免费午夜 | 久久久久人妻一区精品色欧美 | 久久久久免费看成人影片 | 性生交片免费无码看人 | 中国大陆精品视频xxxx | 粗大的内捧猛烈进出视频 | 久久国内精品自在自线 | 国产人妻精品一区二区三区不卡 | 亚洲无人区午夜福利码高清完整版 | 中文毛片无遮挡高清免费 | 精品无码国产自产拍在线观看蜜 | 亚洲国产精品一区二区第一页 | 波多野结衣乳巨码无在线观看 | 香港三级日本三级妇三级 | 欧美日韩一区二区免费视频 | 玩弄人妻少妇500系列视频 | 亚洲国产成人av在线观看 | 激情爆乳一区二区三区 | 色一情一乱一伦一区二区三欧美 | 东京无码熟妇人妻av在线网址 | 欧美一区二区三区视频在线观看 | 日本熟妇大屁股人妻 | 久久久久99精品成人片 | 无码精品人妻一区二区三区av | 久久精品国产99精品亚洲 | 国产精品无码永久免费888 | 久在线观看福利视频 | 在线欧美精品一区二区三区 | 久久综合狠狠综合久久综合88 | 午夜无码人妻av大片色欲 | 激情内射亚州一区二区三区爱妻 | 国产精品久久久久久久9999 | 色综合视频一区二区三区 | 国产激情无码一区二区app | 亚洲欧美日韩国产精品一区二区 | 国产精品久久久久久久影院 | 国产无遮挡又黄又爽又色 | 成人综合网亚洲伊人 | 无码人妻黑人中文字幕 | 国产精品沙发午睡系列 | 精品国产麻豆免费人成网站 | 牛和人交xxxx欧美 | 少妇高潮喷潮久久久影院 | 樱花草在线社区www | 又大又硬又黄的免费视频 | 国产乱子伦视频在线播放 | 四虎影视成人永久免费观看视频 | 欧美日韩在线亚洲综合国产人 | 福利一区二区三区视频在线观看 | 欧美xxxx黑人又粗又长 | 国产超级va在线观看视频 | 久久无码中文字幕免费影院蜜桃 | 荫蒂被男人添的好舒服爽免费视频 | 婷婷五月综合缴情在线视频 | 久久久久久久女国产乱让韩 | 亚洲中文字幕成人无码 | 日本护士毛茸茸高潮 | 国产精品无码一区二区三区不卡 | 我要看www免费看插插视频 | 久久99精品国产麻豆 | 成人无码影片精品久久久 | 亚洲成av人片天堂网无码】 | 日本丰满护士爆乳xxxx | 久久人人97超碰a片精品 | 国产精品无码一区二区三区不卡 | 亚洲精品国产精品乱码视色 | 99久久精品无码一区二区毛片 | 国产 精品 自在自线 | 熟妇女人妻丰满少妇中文字幕 | 精品无码一区二区三区的天堂 | 欧美肥老太牲交大战 | 成人无码影片精品久久久 | 国精品人妻无码一区二区三区蜜柚 | 呦交小u女精品视频 | 波多野结衣av一区二区全免费观看 | 精品久久8x国产免费观看 | 中文字幕av无码一区二区三区电影 | 99久久99久久免费精品蜜桃 | 特黄特色大片免费播放器图片 | 免费无码的av片在线观看 | 大色综合色综合网站 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产亚av手机在线观看 | 无码人妻丰满熟妇区五十路百度 | 婷婷丁香五月天综合东京热 | 精品国产av色一区二区深夜久久 | 波多野结衣aⅴ在线 | 欧美激情一区二区三区成人 | 欧美黑人性暴力猛交喷水 | 一本久道久久综合婷婷五月 | 亚洲精品www久久久 | 久久精品国产一区二区三区肥胖 | 欧美阿v高清资源不卡在线播放 | 久久久久成人精品免费播放动漫 | 午夜无码区在线观看 | 好屌草这里只有精品 | 国产精品内射视频免费 | 亚洲中文字幕成人无码 | 国产黑色丝袜在线播放 | 亚洲熟女一区二区三区 | 国产极品美女高潮无套在线观看 | а√天堂www在线天堂小说 | 日本熟妇人妻xxxxx人hd | 亚洲成色www久久网站 | 国产人妻精品午夜福利免费 | 国产疯狂伦交大片 | 久久亚洲国产成人精品性色 | 亚洲一区二区三区偷拍女厕 | 欧美精品无码一区二区三区 | 成人女人看片免费视频放人 | 四虎国产精品一区二区 | 午夜免费福利小电影 | 亚洲精品鲁一鲁一区二区三区 | 中文字幕色婷婷在线视频 | 男女超爽视频免费播放 | 白嫩日本少妇做爰 | 噜噜噜亚洲色成人网站 | 成熟女人特级毛片www免费 | 色综合天天综合狠狠爱 | 波多野结衣 黑人 | 曰韩少妇内射免费播放 | 又大又硬又黄的免费视频 | 久久综合给久久狠狠97色 | 中文字幕色婷婷在线视频 | 国产又爽又黄又刺激的视频 | 免费视频欧美无人区码 | 美女极度色诱视频国产 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产成人一区二区三区在线观看 | 欧美 日韩 人妻 高清 中文 | 久久亚洲国产成人精品性色 | 日韩欧美中文字幕公布 | 大屁股大乳丰满人妻 | 东京一本一道一二三区 | 亚洲精品无码国产 | 免费观看黄网站 | 久久精品国产大片免费观看 | 国产成人精品久久亚洲高清不卡 | 久久精品人妻少妇一区二区三区 | 久久无码中文字幕免费影院蜜桃 | 日韩av无码一区二区三区 | 国产精品办公室沙发 | 亚洲狠狠色丁香婷婷综合 | 国产精品久久久一区二区三区 | 成人女人看片免费视频放人 | 日韩精品成人一区二区三区 | 日本一卡2卡3卡四卡精品网站 | 亚洲中文字幕在线无码一区二区 | 亚洲欧美综合区丁香五月小说 | www一区二区www免费 | 人人妻人人澡人人爽人人精品 | 一本久久a久久精品vr综合 | 大地资源网第二页免费观看 | 成人一在线视频日韩国产 | 日日天日日夜日日摸 | 亚洲综合久久一区二区 | 日本饥渴人妻欲求不满 | 成年美女黄网站色大免费视频 | 亚洲精品午夜国产va久久成人 | 香港三级日本三级妇三级 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲国产av精品一区二区蜜芽 | 男女作爱免费网站 | 国产尤物精品视频 | 亚洲欧美国产精品专区久久 | 亚洲精品鲁一鲁一区二区三区 | 久在线观看福利视频 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲精品午夜国产va久久成人 | 免费人成网站视频在线观看 | 国产精品亚洲lv粉色 | 女人被男人躁得好爽免费视频 | 日日天日日夜日日摸 | 99精品视频在线观看免费 | 97无码免费人妻超级碰碰夜夜 | 精品国精品国产自在久国产87 | 日韩精品乱码av一区二区 | 国産精品久久久久久久 | 国产无遮挡吃胸膜奶免费看 | 久久综合色之久久综合 | 人妻少妇被猛烈进入中文字幕 | 亚洲欧美综合区丁香五月小说 | 亚洲爆乳精品无码一区二区三区 | 久久综合色之久久综合 | 亚欧洲精品在线视频免费观看 | 国产精品久久久久影院嫩草 | 亚洲精品久久久久中文第一幕 | 丰满人妻精品国产99aⅴ | 图片区 小说区 区 亚洲五月 | 巨爆乳无码视频在线观看 | 女高中生第一次破苞av | 亚洲阿v天堂在线 | 欧洲美熟女乱又伦 | 成人一在线视频日韩国产 | 亚洲日韩一区二区三区 | 女人高潮内射99精品 | 日韩人妻无码中文字幕视频 | 色噜噜亚洲男人的天堂 | 亚洲a无码综合a国产av中文 | 天天摸天天透天天添 | 一本大道伊人av久久综合 | 国产一区二区三区四区五区加勒比 | 又大又硬又黄的免费视频 | 亚洲精品无码人妻无码 | 在线播放无码字幕亚洲 | 丰满肥臀大屁股熟妇激情视频 | 玩弄少妇高潮ⅹxxxyw | 亚洲日韩一区二区三区 | 欧美日韩综合一区二区三区 | 黑人巨大精品欧美黑寡妇 | 日韩欧美中文字幕在线三区 | 老太婆性杂交欧美肥老太 | 东京一本一道一二三区 | 天堂无码人妻精品一区二区三区 | 国产亚洲精品久久久ai换 | 久久久久av无码免费网 | 天天躁夜夜躁狠狠是什么心态 | 大肉大捧一进一出好爽视频 | 国产成人午夜福利在线播放 | 国产成人精品优优av | 亚洲综合精品香蕉久久网 | 强伦人妻一区二区三区视频18 | 中文字幕 亚洲精品 第1页 | 日本丰满熟妇videos | 国产口爆吞精在线视频 | 久久久久国色av免费观看性色 | 四虎永久在线精品免费网址 | 免费无码一区二区三区蜜桃大 | 午夜福利试看120秒体验区 | 图片小说视频一区二区 | 天堂а√在线中文在线 | 老熟妇乱子伦牲交视频 | 55夜色66夜色国产精品视频 | 成人综合网亚洲伊人 | 国产另类ts人妖一区二区 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久五月精品中文字幕 | 无码乱肉视频免费大全合集 | 日本高清一区免费中文视频 | 久激情内射婷内射蜜桃人妖 | 99久久人妻精品免费一区 | 欧美三级不卡在线观看 | 欧美人与牲动交xxxx | 精品久久久久香蕉网 | 亚洲国产高清在线观看视频 | 久久久久久久人妻无码中文字幕爆 | 男人扒开女人内裤强吻桶进去 | 欧美黑人性暴力猛交喷水 | 一本大道伊人av久久综合 | 中文字幕av无码一区二区三区电影 | 无码av中文字幕免费放 | 国产精品无码一区二区桃花视频 | 久久国产精品萌白酱免费 | 狠狠色丁香久久婷婷综合五月 | 精品欧美一区二区三区久久久 | 久久久精品国产sm最大网站 | 欧美 日韩 亚洲 在线 | 国产人成高清在线视频99最全资源 | 永久黄网站色视频免费直播 | 久久精品人人做人人综合试看 | 少妇无码一区二区二三区 | 国产福利视频一区二区 | 国産精品久久久久久久 | 成人精品天堂一区二区三区 | 扒开双腿吃奶呻吟做受视频 | 久久久中文久久久无码 | 日韩亚洲欧美精品综合 | 狠狠色噜噜狠狠狠7777奇米 | 午夜精品久久久久久久 | 国产熟妇高潮叫床视频播放 | 久久99久久99精品中文字幕 | 四虎国产精品一区二区 | 一本无码人妻在中文字幕免费 | 成在人线av无码免观看麻豆 | 精品人人妻人人澡人人爽人人 | 国产精品igao视频网 | 黑人大群体交免费视频 | 少妇高潮一区二区三区99 | 成人免费视频一区二区 | 人妻天天爽夜夜爽一区二区 | 大肉大捧一进一出视频出来呀 | a在线亚洲男人的天堂 | 亚洲欧美国产精品久久 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久国产精品偷任你爽任你 | 天天综合网天天综合色 | 97精品国产97久久久久久免费 | 国内综合精品午夜久久资源 | 国产亚洲精品久久久久久 | 国产人妖乱国产精品人妖 | 精品一区二区三区无码免费视频 | 天干天干啦夜天干天2017 | 东京热无码av男人的天堂 | 中文字幕无码热在线视频 | 亚洲色无码一区二区三区 | 鲁鲁鲁爽爽爽在线视频观看 | 99视频精品全部免费免费观看 | 日韩人妻少妇一区二区三区 | 男人的天堂2018无码 | 正在播放东北夫妻内射 | 中文字幕无码人妻少妇免费 | 成人片黄网站色大片免费观看 | 少妇人妻av毛片在线看 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久久久亚洲精品男人的天堂 | 青草青草久热国产精品 | 亚洲精品成a人在线观看 | 清纯唯美经典一区二区 | 久久综合九色综合97网 | 亚洲成a人片在线观看日本 | 欧美日韩色另类综合 | 精品国偷自产在线 | 久久视频在线观看精品 | 欧美亚洲国产一区二区三区 | 成人免费无码大片a毛片 | 亚洲欧美日韩国产精品一区二区 | 国产特级毛片aaaaaa高潮流水 | 无码帝国www无码专区色综合 | 久久国产精品精品国产色婷婷 | 99久久婷婷国产综合精品青草免费 | 97精品国产97久久久久久免费 | 色偷偷人人澡人人爽人人模 | 国产亚洲精品久久久久久久久动漫 | 女人被男人躁得好爽免费视频 | 欧美老人巨大xxxx做受 | 亚洲成色在线综合网站 | 四虎影视成人永久免费观看视频 | 999久久久国产精品消防器材 | 国产乱子伦视频在线播放 | 东北女人啪啪对白 | 丰满肥臀大屁股熟妇激情视频 | 日韩精品久久久肉伦网站 | 精品日本一区二区三区在线观看 | 欧美三级不卡在线观看 | 思思久久99热只有频精品66 | 性生交大片免费看l | 国产欧美精品一区二区三区 | 人妻夜夜爽天天爽三区 | 亚洲日本va中文字幕 | 欧美 亚洲 国产 另类 | 国产亚av手机在线观看 | 国产办公室秘书无码精品99 | 国产免费观看黄av片 | 亚洲天堂2017无码中文 | 日本免费一区二区三区最新 | 国产莉萝无码av在线播放 | 两性色午夜视频免费播放 | 18无码粉嫩小泬无套在线观看 | 最新版天堂资源中文官网 | 澳门永久av免费网站 | 欧美成人免费全部网站 | 中文字幕无线码免费人妻 | 伊人久久大香线蕉亚洲 | 国产精品第一区揄拍无码 | 日本免费一区二区三区最新 | 最近中文2019字幕第二页 | 人人澡人人妻人人爽人人蜜桃 | 学生妹亚洲一区二区 | 俺去俺来也www色官网 | 精品成在人线av无码免费看 | 欧美真人作爱免费视频 | 午夜免费福利小电影 | 88国产精品欧美一区二区三区 | 日本精品人妻无码77777 天堂一区人妻无码 | 激情内射日本一区二区三区 | 高潮毛片无遮挡高清免费视频 | 波多野结衣aⅴ在线 | 国产精品沙发午睡系列 | 精品欧美一区二区三区久久久 | 天天躁夜夜躁狠狠是什么心态 | 亚洲日韩av一区二区三区中文 | 男人扒开女人内裤强吻桶进去 | 久久久成人毛片无码 | 奇米影视7777久久精品 | 日韩欧美中文字幕公布 | 欧美一区二区三区 | 国产精品爱久久久久久久 | 在线观看国产午夜福利片 | 亚洲中文字幕无码中字 | 爽爽影院免费观看 | 国产色视频一区二区三区 | 久久99精品国产.久久久久 | 性色欲网站人妻丰满中文久久不卡 | 激情人妻另类人妻伦 | 国产精品香蕉在线观看 | 少女韩国电视剧在线观看完整 | 亚洲人成网站免费播放 | 国模大胆一区二区三区 | 中文字幕无线码 | 久久久久久av无码免费看大片 | 人人妻人人澡人人爽欧美精品 | 欧美成人免费全部网站 | 国内精品一区二区三区不卡 | 丰满人妻一区二区三区免费视频 | 亚洲综合久久一区二区 | 男女超爽视频免费播放 | 国产三级久久久精品麻豆三级 | 激情国产av做激情国产爱 | 成人精品天堂一区二区三区 | 老子影院午夜精品无码 | 亚洲第一网站男人都懂 | 东北女人啪啪对白 | 久久亚洲日韩精品一区二区三区 | 1000部啪啪未满十八勿入下载 | 久久午夜无码鲁丝片秋霞 | 午夜时刻免费入口 | 亚洲欧美日韩成人高清在线一区 | 久久久中文久久久无码 | 色噜噜亚洲男人的天堂 | 亚洲天堂2017无码中文 | 亚洲乱码国产乱码精品精 | 青青青手机频在线观看 | 综合人妻久久一区二区精品 | 亚洲精品中文字幕久久久久 | 天堂а√在线中文在线 | 国内老熟妇对白xxxxhd | 国产亚洲精品精品国产亚洲综合 | 少妇愉情理伦片bd | 色婷婷久久一区二区三区麻豆 | 小泽玛莉亚一区二区视频在线 | 97无码免费人妻超级碰碰夜夜 | 国产av人人夜夜澡人人爽麻豆 | 亚洲毛片av日韩av无码 | 国产 精品 自在自线 | 日日橹狠狠爱欧美视频 | 98国产精品综合一区二区三区 | 久久久久99精品成人片 | 中文字幕无码免费久久99 | 精品久久久久久人妻无码中文字幕 | 99久久亚洲精品无码毛片 | 奇米影视7777久久精品 | 欧洲极品少妇 | 久久精品国产一区二区三区 | 亚洲娇小与黑人巨大交 | 日日摸日日碰夜夜爽av | 国产精品久久福利网站 | 日本精品久久久久中文字幕 | 色欲av亚洲一区无码少妇 | 狠狠色丁香久久婷婷综合五月 | 国精产品一品二品国精品69xx | 亚拍精品一区二区三区探花 | 在线观看欧美一区二区三区 | 久久精品国产99精品亚洲 | 久久精品中文字幕大胸 | 久久亚洲精品成人无码 | 人妻少妇精品视频专区 | 波多野结衣高清一区二区三区 | 色欲av亚洲一区无码少妇 | 成人精品天堂一区二区三区 | √8天堂资源地址中文在线 | 377p欧洲日本亚洲大胆 | 人妻少妇精品久久 | 国产av一区二区精品久久凹凸 | 欧洲美熟女乱又伦 | www国产亚洲精品久久久日本 | 亚洲大尺度无码无码专区 | 中文久久乱码一区二区 | 小sao货水好多真紧h无码视频 | 久久久精品456亚洲影院 | 久久久久亚洲精品男人的天堂 | 呦交小u女精品视频 | 欧美xxxx黑人又粗又长 | 日韩精品无码一本二本三本色 | 久久久久久国产精品无码下载 | 最新国产乱人伦偷精品免费网站 | 成人女人看片免费视频放人 | 强伦人妻一区二区三区视频18 | 无码av岛国片在线播放 | 黑人巨大精品欧美黑寡妇 | 天堂а√在线中文在线 | 国产亚洲精品久久久久久国模美 | 国产超碰人人爽人人做人人添 | 亚洲va中文字幕无码久久不卡 | 久久精品国产一区二区三区肥胖 | 亚洲经典千人经典日产 | 55夜色66夜色国产精品视频 | 日本熟妇人妻xxxxx人hd | 亚洲国产精品美女久久久久 | 丰满岳乱妇在线观看中字无码 | 精品久久久无码中文字幕 | www国产精品内射老师 | 秋霞成人午夜鲁丝一区二区三区 | 内射巨臀欧美在线视频 | 高潮毛片无遮挡高清免费 | 亚洲无人区一区二区三区 | 国产又爽又猛又粗的视频a片 | 99国产欧美久久久精品 | 久久www免费人成人片 | 欧美日韩亚洲国产精品 | 久久99精品久久久久久 | 一个人看的视频www在线 | 成人免费视频在线观看 | 精品熟女少妇av免费观看 | 搡女人真爽免费视频大全 | 少妇人妻av毛片在线看 | 亚洲欧美色中文字幕在线 | 狂野欧美性猛xxxx乱大交 | 特大黑人娇小亚洲女 | 欧美精品在线观看 | 欧美人与善在线com | 一二三四在线观看免费视频 | 亚洲精品久久久久久一区二区 | 国产欧美熟妇另类久久久 | 成 人影片 免费观看 | 婷婷丁香六月激情综合啪 | 综合激情五月综合激情五月激情1 | 日韩视频 中文字幕 视频一区 | 久久成人a毛片免费观看网站 | 久久五月精品中文字幕 | 国产精品久久久久久亚洲影视内衣 | 亚洲精品无码国产 | 狠狠色色综合网站 | 国产精品a成v人在线播放 | 国产亲子乱弄免费视频 | 中文精品无码中文字幕无码专区 | 精品无码国产一区二区三区av | 东京热男人av天堂 | 88国产精品欧美一区二区三区 | 丰腴饱满的极品熟妇 | 成人亚洲精品久久久久 | 国产性生交xxxxx无码 | 国产午夜视频在线观看 | 狠狠综合久久久久综合网 | 欧美老熟妇乱xxxxx | 亚洲国产精品无码久久久久高潮 | 国产成人无码a区在线观看视频app | 亚洲国产一区二区三区在线观看 | 久久精品国产亚洲精品 | 无码一区二区三区在线 | 精品国产国产综合精品 | 国产午夜无码视频在线观看 | 久青草影院在线观看国产 | 国产免费久久精品国产传媒 | 人人妻人人澡人人爽欧美一区 | 欧美丰满熟妇xxxx | 又粗又大又硬毛片免费看 | 强奷人妻日本中文字幕 | 国产精品久久久一区二区三区 | 欧美成人家庭影院 | 亚洲欧美色中文字幕在线 | 精品人妻人人做人人爽 | 国产小呦泬泬99精品 | 国产成人无码a区在线观看视频app | 国产午夜福利100集发布 | 99er热精品视频 | 鲁大师影院在线观看 | 成人一在线视频日韩国产 | 国产成人人人97超碰超爽8 | 亚洲精品国产a久久久久久 | 日日碰狠狠躁久久躁蜜桃 | 成人无码影片精品久久久 | 午夜丰满少妇性开放视频 | 东京无码熟妇人妻av在线网址 | 国产真实乱对白精彩久久 | yw尤物av无码国产在线观看 | 国产麻豆精品精东影业av网站 | 中文字幕乱码中文乱码51精品 | 欧美变态另类xxxx | 熟妇女人妻丰满少妇中文字幕 | 综合激情五月综合激情五月激情1 | 日韩av激情在线观看 | 国产精品18久久久久久麻辣 | 少妇激情av一区二区 | 欧美人与牲动交xxxx | 成人无码精品1区2区3区免费看 | 久久精品99久久香蕉国产色戒 | 天天摸天天透天天添 | 熟妇人妻无码xxx视频 | 国产精品欧美成人 | 国产三级精品三级男人的天堂 | 任你躁在线精品免费 | 亚洲精品国产精品乱码视色 | 荡女精品导航 | 亚洲成av人综合在线观看 | 九九久久精品国产免费看小说 | 成人影院yy111111在线观看 | 欧美精品免费观看二区 | 天堂а√在线中文在线 | 亚洲中文字幕无码中文字在线 | 高中生自慰www网站 | 精品人人妻人人澡人人爽人人 | 国产熟妇高潮叫床视频播放 | 激情人妻另类人妻伦 | 亚洲の无码国产の无码影院 | 日韩无码专区 | 露脸叫床粗话东北少妇 | 日韩人妻无码一区二区三区久久99 | 免费网站看v片在线18禁无码 | 中文亚洲成a人片在线观看 | 在线精品亚洲一区二区 | 午夜熟女插插xx免费视频 | 婷婷色婷婷开心五月四房播播 | 日韩成人一区二区三区在线观看 | 亚洲国产高清在线观看视频 | 欧美日本精品一区二区三区 | 岛国片人妻三上悠亚 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品无码一区二区三区不卡 | 亚洲国产成人av在线观看 | 水蜜桃亚洲一二三四在线 | 午夜福利一区二区三区在线观看 | 内射老妇bbwx0c0ck | 日本va欧美va欧美va精品 | 国产成人无码一二三区视频 | 亚洲日本一区二区三区在线 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产精品美女久久久久av爽李琼 | 熟妇人妻中文av无码 | 国产精品无码一区二区桃花视频 | 日本一区二区三区免费高清 | 亚洲中文字幕乱码av波多ji | 熟女少妇在线视频播放 | 97久久精品无码一区二区 | 无码精品国产va在线观看dvd | 国产无遮挡又黄又爽免费视频 | 国内综合精品午夜久久资源 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品嫩草久久久久 | 日本高清一区免费中文视频 | 天堂无码人妻精品一区二区三区 | 日本肉体xxxx裸交 | 无码av免费一区二区三区试看 | 蜜桃av抽搐高潮一区二区 | 国产精品-区区久久久狼 | 精品偷自拍另类在线观看 | 精品人妻人人做人人爽夜夜爽 | 国产97在线 | 亚洲 | 国产精品亚洲一区二区三区喷水 | 人人妻人人澡人人爽欧美一区九九 | 色一情一乱一伦一区二区三欧美 | 一本大道伊人av久久综合 | 日韩精品a片一区二区三区妖精 | 人妻插b视频一区二区三区 | 亚洲午夜福利在线观看 | 激情人妻另类人妻伦 | 特黄特色大片免费播放器图片 | 久激情内射婷内射蜜桃人妖 | 东京无码熟妇人妻av在线网址 | 欧洲精品码一区二区三区免费看 | 2019午夜福利不卡片在线 | 无码帝国www无码专区色综合 | 免费看少妇作爱视频 | 色窝窝无码一区二区三区色欲 | 精品夜夜澡人妻无码av蜜桃 | 精品无码国产自产拍在线观看蜜 | 国产精品久久久午夜夜伦鲁鲁 | 久久久国产一区二区三区 | 国产成人精品视频ⅴa片软件竹菊 | 67194成是人免费无码 | 久久久久成人片免费观看蜜芽 | 亚洲成av人影院在线观看 | 亚洲啪av永久无码精品放毛片 | 国产亚洲欧美日韩亚洲中文色 | 夫妻免费无码v看片 | 国产乱人伦av在线无码 | 呦交小u女精品视频 | 精品午夜福利在线观看 | 日韩精品无码免费一区二区三区 | 久久精品人人做人人综合试看 | 午夜精品一区二区三区在线观看 | 在线天堂新版最新版在线8 | 国产亚洲精品精品国产亚洲综合 | 熟女体下毛毛黑森林 | 国产精品美女久久久 | 国产人妻人伦精品1国产丝袜 | 麻豆md0077饥渴少妇 | 最近中文2019字幕第二页 | 国精品人妻无码一区二区三区蜜柚 | 波多野42部无码喷潮在线 | 欧美日韩综合一区二区三区 | 欧美日韩久久久精品a片 | 国产成人精品久久亚洲高清不卡 | 国产精品久久久久7777 | 久久亚洲中文字幕精品一区 | 精品久久久中文字幕人妻 | 中文无码成人免费视频在线观看 | 国产香蕉尹人视频在线 | 国内少妇偷人精品视频免费 | 精品国产青草久久久久福利 | 亚洲欧美精品伊人久久 | 少妇性l交大片欧洲热妇乱xxx | 亚洲日韩av一区二区三区四区 | 国产成人精品优优av | 成年美女黄网站色大免费全看 | 曰韩无码二三区中文字幕 | 精品国产国产综合精品 | 亚洲成a人片在线观看无码 | 精品午夜福利在线观看 | 一个人免费观看的www视频 | 真人与拘做受免费视频一 | 啦啦啦www在线观看免费视频 | 激情人妻另类人妻伦 | 国产亚洲tv在线观看 | 99er热精品视频 | 欧美肥老太牲交大战 | 国内精品人妻无码久久久影院蜜桃 | 日本饥渴人妻欲求不满 | 99久久精品国产一区二区蜜芽 | 国产特级毛片aaaaaa高潮流水 | 成在人线av无码免费 | 无码免费一区二区三区 | 精品一区二区三区无码免费视频 | 疯狂三人交性欧美 | 国产麻豆精品精东影业av网站 | 国产无av码在线观看 | 欧美人与动性行为视频 | 帮老师解开蕾丝奶罩吸乳网站 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 又大又紧又粉嫩18p少妇 | 九月婷婷人人澡人人添人人爽 | 小泽玛莉亚一区二区视频在线 | 熟妇人妻无码xxx视频 | 亚洲精品欧美二区三区中文字幕 | 免费看少妇作爱视频 | 成人无码精品一区二区三区 | 51国偷自产一区二区三区 | 精品久久久久久人妻无码中文字幕 | 99久久99久久免费精品蜜桃 | 亚洲精品一区二区三区在线观看 | 男人和女人高潮免费网站 | аⅴ资源天堂资源库在线 | 秋霞特色aa大片 | 亚洲国产精品一区二区美利坚 | 人人爽人人爽人人片av亚洲 | 亚洲高清偷拍一区二区三区 | 草草网站影院白丝内射 | 麻豆av传媒蜜桃天美传媒 | 国产成人无码一二三区视频 | 日日干夜夜干 | 午夜肉伦伦影院 | 亚洲欧洲日本综合aⅴ在线 | 成人欧美一区二区三区黑人免费 | 亚洲七七久久桃花影院 | 中文无码成人免费视频在线观看 | 红桃av一区二区三区在线无码av | 在线天堂新版最新版在线8 | 亚洲人亚洲人成电影网站色 | 一本色道婷婷久久欧美 | 国产精品久久久久无码av色戒 | 国産精品久久久久久久 | 88国产精品欧美一区二区三区 | 日本高清一区免费中文视频 | √天堂中文官网8在线 | 亚洲精品国产精品乱码不卡 | 国产极品视觉盛宴 | 激情亚洲一区国产精品 | 大地资源网第二页免费观看 | 精品欧洲av无码一区二区三区 | 在教室伦流澡到高潮hnp视频 | 国产激情无码一区二区 | 无码国模国产在线观看 | av无码久久久久不卡免费网站 | 性欧美熟妇videofreesex | 久久精品女人天堂av免费观看 | 男女性色大片免费网站 | 天天拍夜夜添久久精品大 | 国产真人无遮挡作爱免费视频 | 精品人妻人人做人人爽 | 亚洲精品午夜国产va久久成人 | 亚洲欧美综合区丁香五月小说 | 久久亚洲中文字幕无码 | 男女超爽视频免费播放 | 久久99精品国产麻豆 | av无码电影一区二区三区 | 男女性色大片免费网站 | 女高中生第一次破苞av | 欧美黑人巨大xxxxx | 久久精品99久久香蕉国产色戒 | 九九综合va免费看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲国产成人a精品不卡在线 | 亚洲综合精品香蕉久久网 | 任你躁在线精品免费 | 午夜精品久久久久久久久 | 十八禁视频网站在线观看 | 乌克兰少妇性做爰 | 中文字幕人妻无码一区二区三区 | 国产精品手机免费 | 老熟女重囗味hdxx69 | 在线亚洲高清揄拍自拍一品区 | 久久久精品欧美一区二区免费 | 色欲av亚洲一区无码少妇 | 婷婷五月综合激情中文字幕 | 亚洲一区二区三区四区 | 丰满少妇人妻久久久久久 | 亚无码乱人伦一区二区 | 在线 国产 欧美 亚洲 天堂 | 欧美日本精品一区二区三区 | 日日碰狠狠躁久久躁蜜桃 | 欧美亚洲国产一区二区三区 | 色诱久久久久综合网ywww | 亚洲乱码日产精品bd | 日产精品高潮呻吟av久久 | 亚洲日韩中文字幕在线播放 | 香蕉久久久久久av成人 | 天天躁日日躁狠狠躁免费麻豆 | 亚洲国精产品一二二线 | 国产人妻久久精品二区三区老狼 | 人妻无码αv中文字幕久久琪琪布 | 亚洲一区二区三区在线观看网站 | aⅴ在线视频男人的天堂 | 日本乱偷人妻中文字幕 | 久久国产精品精品国产色婷婷 | 免费观看激色视频网站 | 久久久国产精品无码免费专区 | 国产亚洲美女精品久久久2020 | 国产电影无码午夜在线播放 | 暴力强奷在线播放无码 | 娇妻被黑人粗大高潮白浆 | 一个人免费观看的www视频 | 久久伊人色av天堂九九小黄鸭 | 熟女俱乐部五十路六十路av | 国产精品毛片一区二区 | 午夜男女很黄的视频 | 欧美猛少妇色xxxxx | 鲁大师影院在线观看 | 国产亚洲精品久久久闺蜜 | 永久免费精品精品永久-夜色 | 免费人成在线视频无码 | 美女黄网站人色视频免费国产 | 亚洲码国产精品高潮在线 | 国产人妻精品午夜福利免费 | 久久精品国产99久久6动漫 | 又色又爽又黄的美女裸体网站 | 牲欲强的熟妇农村老妇女视频 | 麻花豆传媒剧国产免费mv在线 | 久久亚洲a片com人成 | 麻豆av传媒蜜桃天美传媒 | 国内精品一区二区三区不卡 | 国产成人人人97超碰超爽8 | 国产精品内射视频免费 | 欧美野外疯狂做受xxxx高潮 | 人妻人人添人妻人人爱 | 久久久久99精品成人片 | 六月丁香婷婷色狠狠久久 | 久久综合色之久久综合 | 欧美日韩在线亚洲综合国产人 | 亚洲狠狠婷婷综合久久 | 中文字幕亚洲情99在线 | 亚洲国产精品成人久久蜜臀 | 国产亚洲欧美在线专区 | 美女极度色诱视频国产 | 国产激情艳情在线看视频 | 中文字幕av日韩精品一区二区 | 2020最新国产自产精品 | 成人影院yy111111在线观看 | 两性色午夜视频免费播放 | 99国产欧美久久久精品 | 内射巨臀欧美在线视频 | 一本大道伊人av久久综合 | 午夜肉伦伦影院 | a片免费视频在线观看 | 亚洲日韩av一区二区三区四区 | aⅴ在线视频男人的天堂 | 久久久久成人片免费观看蜜芽 | 学生妹亚洲一区二区 | 内射爽无广熟女亚洲 | 欧美兽交xxxx×视频 | 麻豆md0077饥渴少妇 | 国产精品久久久一区二区三区 | 中文字幕中文有码在线 | 精品国精品国产自在久国产87 | 亚洲精品欧美二区三区中文字幕 | 任你躁国产自任一区二区三区 | 曰韩少妇内射免费播放 | 搡女人真爽免费视频大全 | 黑人大群体交免费视频 | 中文字幕av伊人av无码av | 国产av剧情md精品麻豆 | 国产精品-区区久久久狼 | 激情人妻另类人妻伦 | 午夜肉伦伦影院 | 亚洲精品美女久久久久久久 | 亚洲爆乳大丰满无码专区 | 99久久精品国产一区二区蜜芽 | 中文字幕 亚洲精品 第1页 | 国产精品国产自线拍免费软件 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 中文字幕乱码人妻无码久久 | 波多野结衣一区二区三区av免费 | 天堂亚洲2017在线观看 | 成人无码视频在线观看网站 | 久久人人爽人人爽人人片ⅴ | 日韩人妻无码一区二区三区久久99 | 欧美兽交xxxx×视频 | 人妻尝试又大又粗久久 | 久久五月精品中文字幕 | 亚洲成av人在线观看网址 | 狠狠综合久久久久综合网 | 无人区乱码一区二区三区 | 欧美刺激性大交 | 窝窝午夜理论片影院 | 亚洲一区二区三区四区 | 国产av一区二区三区最新精品 | 中文字幕无线码 | 欧美zoozzooz性欧美 | 性啪啪chinese东北女人 | 少妇被粗大的猛进出69影院 | 国产精品久久久久9999小说 | 午夜丰满少妇性开放视频 | 少妇人妻大乳在线视频 | 亚洲欧美国产精品专区久久 | 一区二区三区乱码在线 | 欧洲 | 亚洲另类伦春色综合小说 | 色婷婷综合激情综在线播放 | 国产成人精品一区二区在线小狼 | 中文毛片无遮挡高清免费 | 天天综合网天天综合色 | 国产精品高潮呻吟av久久4虎 | 丰满人妻被黑人猛烈进入 | 暴力强奷在线播放无码 | 丰满人妻一区二区三区免费视频 | 亚洲精品综合五月久久小说 | 亚洲毛片av日韩av无码 | 国产亚洲tv在线观看 | 激情内射亚州一区二区三区爱妻 | 青青青手机频在线观看 | 天天摸天天碰天天添 | 欧美国产日韩亚洲中文 | 久久天天躁夜夜躁狠狠 | 人人爽人人澡人人高潮 | 久热国产vs视频在线观看 | 亚洲精品成a人在线观看 | 免费观看黄网站 | 精品国产一区av天美传媒 | 纯爱无遮挡h肉动漫在线播放 | 亚洲精品中文字幕久久久久 | 在线播放亚洲第一字幕 | 成人欧美一区二区三区黑人 | 2020久久香蕉国产线看观看 | 人人爽人人爽人人片av亚洲 | 亚洲国产欧美在线成人 | 成 人影片 免费观看 | 色情久久久av熟女人妻网站 | 亚洲精品国产第一综合99久久 | 中文字幕久久久久人妻 | 日日夜夜撸啊撸 | 激情人妻另类人妻伦 | 国产一区二区三区精品视频 | 日欧一片内射va在线影院 | 无码播放一区二区三区 | 中文无码精品a∨在线观看不卡 | 嫩b人妻精品一区二区三区 | 成人一区二区免费视频 | 美女毛片一区二区三区四区 | 亚洲成a人一区二区三区 | 久在线观看福利视频 | 亚洲色在线无码国产精品不卡 | 国产精品自产拍在线观看 | 日本精品人妻无码免费大全 | 精品国偷自产在线 | 少妇性俱乐部纵欲狂欢电影 | 久久99精品国产麻豆蜜芽 | 国产超级va在线观看视频 | 97无码免费人妻超级碰碰夜夜 | 国产内射爽爽大片视频社区在线 | 国产特级毛片aaaaaa高潮流水 | 日韩无套无码精品 | 国产成人无码午夜视频在线观看 | 国产熟女一区二区三区四区五区 | 国产性生交xxxxx无码 | 欧美真人作爱免费视频 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | aⅴ在线视频男人的天堂 | 97无码免费人妻超级碰碰夜夜 | 亚洲一区二区观看播放 | 国产情侣作爱视频免费观看 | 免费乱码人妻系列无码专区 | 亚洲中文字幕无码一久久区 | 欧美兽交xxxx×视频 | 日本又色又爽又黄的a片18禁 | 中文亚洲成a人片在线观看 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲成av人片天堂网无码】 | 亚洲精品国偷拍自产在线麻豆 | 乱人伦中文视频在线观看 | 亚洲精品国产a久久久久久 | 亚洲熟悉妇女xxx妇女av | 日日麻批免费40分钟无码 | 国产三级久久久精品麻豆三级 | 亚洲人成网站在线播放942 | 国产成人综合色在线观看网站 | 国产精品美女久久久网av | 久久精品国产一区二区三区 | 国产精品自产拍在线观看 | 97人妻精品一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 牛和人交xxxx欧美 | 东京热无码av男人的天堂 | 色老头在线一区二区三区 | 国产又爽又猛又粗的视频a片 | 亚洲天堂2017无码中文 | 亚洲小说春色综合另类 | 亚洲精品www久久久 | 国语自产偷拍精品视频偷 | 中文字幕 人妻熟女 | 成在人线av无码免观看麻豆 | 久久精品人人做人人综合试看 | 人人爽人人澡人人高潮 | 清纯唯美经典一区二区 | 51国偷自产一区二区三区 | 国产精品多人p群无码 | 国产亚洲人成在线播放 | 99久久99久久免费精品蜜桃 | 97资源共享在线视频 | 久久精品人人做人人综合 | 成人欧美一区二区三区 | 中文字幕日产无线码一区 | 人妻夜夜爽天天爽三区 | 精品人人妻人人澡人人爽人人 | 天天综合网天天综合色 | 国产美女精品一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 国产亚洲精品精品国产亚洲综合 | 无码人妻精品一区二区三区下载 | 国内精品人妻无码久久久影院蜜桃 | 在线观看国产午夜福利片 | 欧美性色19p | 亚洲国产精品美女久久久久 | 丰满少妇高潮惨叫视频 | 影音先锋中文字幕无码 | 亚洲国产精品久久久久久 | 特级做a爰片毛片免费69 | 51国偷自产一区二区三区 | 呦交小u女精品视频 | 中文字幕无码日韩专区 | 国产精品无码永久免费888 | 成人欧美一区二区三区黑人 | 亚洲午夜福利在线观看 | 欧美人与动性行为视频 | 国产精品a成v人在线播放 | 少妇被黑人到高潮喷出白浆 | 九月婷婷人人澡人人添人人爽 | 超碰97人人射妻 | 精品国产福利一区二区 | 人人妻人人澡人人爽精品欧美 | 亚洲日韩av一区二区三区四区 | 国产成人一区二区三区在线观看 | 久久亚洲中文字幕无码 | 动漫av一区二区在线观看 | 丰满肥臀大屁股熟妇激情视频 | 无码任你躁久久久久久久 | 亚洲熟妇自偷自拍另类 | 中文精品无码中文字幕无码专区 | 欧美老人巨大xxxx做受 | 天天拍夜夜添久久精品大 | 无码人中文字幕 | 中文字幕 亚洲精品 第1页 | 欧美国产日韩亚洲中文 | 人妻无码αv中文字幕久久琪琪布 | 久久亚洲精品中文字幕无男同 | 樱花草在线社区www | 性生交大片免费看女人按摩摩 | 国产片av国语在线观看 | 国产亚洲欧美在线专区 | 国产精品久久久久影院嫩草 | 99麻豆久久久国产精品免费 | 国产精品va在线观看无码 | 亚洲欧洲日本无在线码 | 无码人中文字幕 | 精品水蜜桃久久久久久久 | 乌克兰少妇xxxx做受 | 久久天天躁夜夜躁狠狠 | 亚洲乱码日产精品bd | 久久久国产精品无码免费专区 | 欧美日本免费一区二区三区 | 亚洲自偷自偷在线制服 | 啦啦啦www在线观看免费视频 | av人摸人人人澡人人超碰下载 | 国产一区二区三区四区五区加勒比 | 亚洲色在线无码国产精品不卡 | 麻豆精产国品 | 99精品国产综合久久久久五月天 | 极品尤物被啪到呻吟喷水 | 丁香啪啪综合成人亚洲 | 久久久www成人免费毛片 | 日韩av无码一区二区三区 | 亚洲日韩av一区二区三区中文 | 成人免费视频视频在线观看 免费 | 人人妻人人澡人人爽精品欧美 | 荫蒂添的好舒服视频囗交 | 成人精品视频一区二区 | 国产xxx69麻豆国语对白 | 国产一区二区不卡老阿姨 | 无码吃奶揉捏奶头高潮视频 | 亚洲一区二区三区无码久久 | 日韩亚洲欧美精品综合 | 给我免费的视频在线观看 | 成人动漫在线观看 | 久久久精品456亚洲影院 | 久久久国产精品无码免费专区 | 亚洲人成网站在线播放942 | 亚洲日韩一区二区三区 | 少妇无码av无码专区在线观看 | 国产香蕉97碰碰久久人人 | 天天拍夜夜添久久精品 | 亚洲国产精品一区二区美利坚 | 亚洲国产成人av在线观看 | 欧美丰满熟妇xxxx性ppx人交 | 成人无码精品一区二区三区 | 水蜜桃亚洲一二三四在线 | 亚洲国产精品成人久久蜜臀 | 中文字幕久久久久人妻 | 免费中文字幕日韩欧美 | 久久综合久久自在自线精品自 | 国产深夜福利视频在线 | 亚洲精品无码人妻无码 | 久精品国产欧美亚洲色aⅴ大片 | 熟女少妇在线视频播放 | 久久久国产一区二区三区 | 狠狠色噜噜狠狠狠7777奇米 | 久久久久久久人妻无码中文字幕爆 | 国语精品一区二区三区 | 狠狠色噜噜狠狠狠狠7777米奇 | www国产亚洲精品久久久日本 | 久久久精品456亚洲影院 | 久久天天躁狠狠躁夜夜免费观看 | 无码人妻黑人中文字幕 | 久久99精品久久久久久动态图 | 国产免费久久久久久无码 | 久久99精品久久久久久动态图 | 爽爽影院免费观看 | 少妇性俱乐部纵欲狂欢电影 | 少妇厨房愉情理9仑片视频 | 一本色道久久综合亚洲精品不卡 | 亚洲国产av精品一区二区蜜芽 | 国产精品国产三级国产专播 | 欧美三级a做爰在线观看 | 午夜嘿嘿嘿影院 | 亚洲区小说区激情区图片区 | 国产av人人夜夜澡人人爽麻豆 | 亚洲一区二区三区偷拍女厕 | 国产精品久久精品三级 | 国产亚洲tv在线观看 | 无码人妻精品一区二区三区不卡 | 99国产精品白浆在线观看免费 | 亚洲春色在线视频 | 久久 国产 尿 小便 嘘嘘 | 国产明星裸体无码xxxx视频 | 老子影院午夜精品无码 | 午夜男女很黄的视频 | 久久综合九色综合欧美狠狠 | 亚洲а∨天堂久久精品2021 | 婷婷丁香五月天综合东京热 | 久久综合狠狠综合久久综合88 | 漂亮人妻洗澡被公强 日日躁 | 激情综合激情五月俺也去 | 波多野结衣av一区二区全免费观看 | 日本精品少妇一区二区三区 | av无码电影一区二区三区 | 中文字幕人妻无码一夲道 | 亚洲熟妇色xxxxx欧美老妇y | 精品欧美一区二区三区久久久 | 色噜噜亚洲男人的天堂 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 日韩精品无码一本二本三本色 | 久久亚洲国产成人精品性色 | 伊人色综合久久天天小片 | 国产农村妇女高潮大叫 | 最近的中文字幕在线看视频 | 最新国产乱人伦偷精品免费网站 | 少妇一晚三次一区二区三区 | 精品国产av色一区二区深夜久久 | 久久久久久a亚洲欧洲av冫 | 日本熟妇人妻xxxxx人hd | 亚洲国产精品久久久天堂 | 麻豆国产丝袜白领秘书在线观看 | 18精品久久久无码午夜福利 | 日本熟妇大屁股人妻 | 国产av无码专区亚洲awww | 国产无套内射久久久国产 | 亚洲天堂2017无码中文 | 丰腴饱满的极品熟妇 | 午夜不卡av免费 一本久久a久久精品vr综合 | 亚洲aⅴ无码成人网站国产app | 妺妺窝人体色www在线小说 | 国产av一区二区三区最新精品 | 一本色道婷婷久久欧美 | 一二三四在线观看免费视频 | 国产亚洲日韩欧美另类第八页 | 乱人伦中文视频在线观看 | 日本一卡2卡3卡四卡精品网站 | 欧美 日韩 人妻 高清 中文 | 清纯唯美经典一区二区 | 久久精品中文字幕大胸 | 日本爽爽爽爽爽爽在线观看免 | 国产女主播喷水视频在线观看 | 国产午夜视频在线观看 | 欧美丰满熟妇xxxx | 搡女人真爽免费视频大全 | 久久婷婷五月综合色国产香蕉 | 国产成人一区二区三区在线观看 | 国产在线精品一区二区高清不卡 | 领导边摸边吃奶边做爽在线观看 | 亚洲一区二区三区无码久久 | 亚洲精品鲁一鲁一区二区三区 | 最近的中文字幕在线看视频 | 97精品国产97久久久久久免费 | 人人妻人人澡人人爽欧美一区 | 高潮喷水的毛片 | 樱花草在线社区www | 国产精品内射视频免费 | 九月婷婷人人澡人人添人人爽 | 国产熟女一区二区三区四区五区 | 国产成人av免费观看 | 粗大的内捧猛烈进出视频 | 国产莉萝无码av在线播放 | 亚洲国产成人a精品不卡在线 | 蜜桃视频插满18在线观看 | 天天燥日日燥 | 久久久精品国产sm最大网站 | 中文字幕亚洲情99在线 | 精品无码国产自产拍在线观看蜜 | 丰满少妇弄高潮了www | 天下第一社区视频www日本 | 亚洲一区二区三区在线观看网站 | 大肉大捧一进一出好爽视频 | 日韩欧美中文字幕公布 | 国产精品99爱免费视频 | 久久久亚洲欧洲日产国码αv | 麻豆av传媒蜜桃天美传媒 | 亚洲精品国产品国语在线观看 | 欧美人与牲动交xxxx | 日韩欧美群交p片內射中文 | 精品久久久无码人妻字幂 | 丰满妇女强制高潮18xxxx | 成人精品视频一区二区 | 国产偷抇久久精品a片69 | 午夜嘿嘿嘿影院 | 中文字幕日产无线码一区 | 欧美真人作爱免费视频 | 欧美变态另类xxxx | 蜜桃视频韩日免费播放 | 国产激情无码一区二区 | 兔费看少妇性l交大片免费 | 国产特级毛片aaaaaaa高清 | 国产97色在线 | 免 | 97久久精品无码一区二区 | 亚洲精品午夜无码电影网 | 无码纯肉视频在线观看 | 亚洲人交乣女bbw | 国产猛烈高潮尖叫视频免费 | 久久综合九色综合欧美狠狠 | 2019nv天堂香蕉在线观看 | 狠狠cao日日穞夜夜穞av | 丰满人妻一区二区三区免费视频 | 国产午夜亚洲精品不卡 | 狠狠躁日日躁夜夜躁2020 | 中文字幕无码人妻少妇免费 | 波多野结衣乳巨码无在线观看 | 国产偷国产偷精品高清尤物 | 性欧美牲交在线视频 | 玩弄少妇高潮ⅹxxxyw | 精品无码成人片一区二区98 | 亚洲自偷自拍另类第1页 | 女人被男人躁得好爽免费视频 | 国产在线精品一区二区高清不卡 | 夜夜高潮次次欢爽av女 | 人人爽人人澡人人高潮 | 亚洲日韩一区二区 | 国产精品对白交换视频 | 四虎永久在线精品免费网址 | 亚洲狠狠婷婷综合久久 | 亚洲另类伦春色综合小说 | 亚洲爆乳精品无码一区二区三区 | 草草网站影院白丝内射 | 国产一区二区三区影院 | 欧美猛少妇色xxxxx | 亚洲国产精华液网站w | 国产香蕉97碰碰久久人人 | 男人的天堂2018无码 | 精品人妻中文字幕有码在线 | 国精产品一区二区三区 | 欧美日韩一区二区综合 | 波多野42部无码喷潮在线 | 亚洲综合在线一区二区三区 | 妺妺窝人体色www婷婷 | 国产亚洲精品精品国产亚洲综合 | 在教室伦流澡到高潮hnp视频 | 成在人线av无码免观看麻豆 | 好爽又高潮了毛片免费下载 | 爱做久久久久久 | 欧洲熟妇色 欧美 | 精品少妇爆乳无码av无码专区 | 欧洲熟妇色 欧美 | 扒开双腿吃奶呻吟做受视频 | 玩弄少妇高潮ⅹxxxyw | 国产精品内射视频免费 | 久久久国产一区二区三区 | 日本一卡二卡不卡视频查询 | 国产精品久久久久无码av色戒 | 国产一区二区三区四区五区加勒比 | 亚洲中文字幕无码一久久区 | 国产麻豆精品精东影业av网站 | 亚洲精品久久久久久久久久久 | 国产午夜福利亚洲第一 | 国产精品久久久久7777 | 欧美丰满熟妇xxxx性ppx人交 | 国产av无码专区亚洲a∨毛片 | 波多野结衣av在线观看 | 久久综合网欧美色妞网 | 少妇厨房愉情理9仑片视频 | 内射巨臀欧美在线视频 | 日本又色又爽又黄的a片18禁 | 精品少妇爆乳无码av无码专区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 伊在人天堂亚洲香蕉精品区 | 人人妻人人澡人人爽人人精品 | 亚洲国产av精品一区二区蜜芽 | 精品厕所偷拍各类美女tp嘘嘘 | 97久久超碰中文字幕 | 欧美丰满少妇xxxx性 | 亚洲中文无码av永久不收费 | 性欧美疯狂xxxxbbbb | 好爽又高潮了毛片免费下载 | 色婷婷av一区二区三区之红樱桃 | 国产乱人伦av在线无码 | 2020久久香蕉国产线看观看 | 国产乱人伦偷精品视频 | 国产午夜手机精彩视频 | 亚洲中文字幕在线观看 | 偷窥村妇洗澡毛毛多 | 无码一区二区三区在线观看 | 高潮喷水的毛片 | 国产亚洲欧美日韩亚洲中文色 | 蜜桃无码一区二区三区 | 精品久久久久香蕉网 | 欧美放荡的少妇 | 亚洲色欲色欲天天天www | 精品久久久久久人妻无码中文字幕 | 国产av一区二区精品久久凹凸 | 99久久精品国产一区二区蜜芽 | 樱花草在线社区www | 爆乳一区二区三区无码 | 中文字幕乱码中文乱码51精品 | 久久精品国产日本波多野结衣 | 国产精品手机免费 | 无码乱肉视频免费大全合集 | 午夜福利一区二区三区在线观看 | 亚洲经典千人经典日产 | 图片小说视频一区二区 | 国产午夜无码视频在线观看 | 国产亚洲人成a在线v网站 | 一区二区三区高清视频一 | 乱人伦人妻中文字幕无码久久网 | 曰韩无码二三区中文字幕 | 男女作爱免费网站 | 国产在线无码精品电影网 | 99精品国产综合久久久久五月天 | 人妻尝试又大又粗久久 | 国产偷自视频区视频 | 极品尤物被啪到呻吟喷水 | 成年美女黄网站色大免费视频 | 日本肉体xxxx裸交 | 在线精品国产一区二区三区 | 蜜桃无码一区二区三区 | 久久久久久国产精品无码下载 | 色欲av亚洲一区无码少妇 | 曰韩少妇内射免费播放 | 国产综合久久久久鬼色 | 国产成人无码专区 | 免费观看的无遮挡av | 亚洲精品久久久久avwww潮水 | 成人毛片一区二区 | 人人妻人人澡人人爽人人精品浪潮 | 在线观看国产一区二区三区 | 国内丰满熟女出轨videos | 日韩亚洲欧美中文高清在线 | 午夜性刺激在线视频免费 | 色狠狠av一区二区三区 | 99精品国产综合久久久久五月天 | 乱人伦人妻中文字幕无码久久网 | 网友自拍区视频精品 | 国产精品亚洲专区无码不卡 | 国产午夜精品一区二区三区嫩草 | 亚洲午夜无码久久 | 成人一区二区免费视频 | 99久久婷婷国产综合精品青草免费 | 欧美人与动性行为视频 | 熟妇人妻无码xxx视频 | 亚洲精品久久久久中文第一幕 | 久久国产精品二国产精品 | 日本护士毛茸茸高潮 | 久久久久av无码免费网 | 国产疯狂伦交大片 | 精品国产av色一区二区深夜久久 | 久久国产劲爆∧v内射 | 亚洲成在人网站无码天堂 | 熟妇人妻无乱码中文字幕 | 丰满人妻精品国产99aⅴ | 亚洲国产精品一区二区第一页 | 国精品人妻无码一区二区三区蜜柚 | 一本久久伊人热热精品中文字幕 | 桃花色综合影院 | 18黄暴禁片在线观看 | 国产97人人超碰caoprom | 少妇无码一区二区二三区 | 我要看www免费看插插视频 | 成人免费视频在线观看 | 国产一区二区三区精品视频 | 国产高清不卡无码视频 | 娇妻被黑人粗大高潮白浆 | 日韩欧美中文字幕公布 | 久久综合网欧美色妞网 | 人人妻人人澡人人爽欧美一区九九 | 亚洲一区二区三区国产精华液 | 2020久久超碰国产精品最新 | 人人妻人人澡人人爽人人精品 | 人人爽人人澡人人高潮 | 粗大的内捧猛烈进出视频 | 中文无码精品a∨在线观看不卡 | 久久久精品456亚洲影院 | 国内少妇偷人精品视频免费 | 2019午夜福利不卡片在线 | 欧美日韩亚洲国产精品 | 无码乱肉视频免费大全合集 | 狠狠色欧美亚洲狠狠色www | 131美女爱做视频 | 国产农村妇女高潮大叫 | 乱中年女人伦av三区 | 国精品人妻无码一区二区三区蜜柚 | 波多野结衣av在线观看 | 色情久久久av熟女人妻网站 | 亚洲人成影院在线无码按摩店 | 色欲久久久天天天综合网精品 | 奇米影视888欧美在线观看 | 午夜肉伦伦影院 | 国产亚洲精品久久久久久久久动漫 | 亚洲а∨天堂久久精品2021 | 爆乳一区二区三区无码 | 国产成人无码a区在线观看视频app | 久久人妻内射无码一区三区 | 亚洲码国产精品高潮在线 | 久久无码中文字幕免费影院蜜桃 | 亚洲欧美国产精品专区久久 | 欧洲精品码一区二区三区免费看 | 秋霞成人午夜鲁丝一区二区三区 | 女高中生第一次破苞av | 在线播放免费人成毛片乱码 | 日韩精品a片一区二区三区妖精 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲一区二区三区国产精华液 | 丰满肥臀大屁股熟妇激情视频 | 久久综合色之久久综合 | 无码午夜成人1000部免费视频 | 久久综合狠狠综合久久综合88 | 女人被男人爽到呻吟的视频 | 亚洲色www成人永久网址 | 中文字幕无码日韩专区 | 极品尤物被啪到呻吟喷水 |