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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinSock2编程之打造完整的SOCKET池

發布時間:2024/4/11 编程问答 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinSock2编程之打造完整的SOCKET池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Winodows平臺上,網絡編程的主要接口就是WinSock,目前大多數的Windows平臺上的WinSock平臺已經升級到2.0版,簡稱為WinSock2。在WinSock2中擴展了很多很有用的Windows味很濃的SOCKET專用API,為Windows平臺用戶提供高性能的網絡編程支持。這些函數中的大多數已經不再是標準的“Berkeley”套接字模型的API了。使用這些函數的代價就是你不能再將你的網絡程序輕松的移植到“尤里平臺”(我給Unix +Linux平臺的簡稱)下,反過來因為Windows平臺支持標準的“Berkeley”套接字模型,所以你可以將大多數尤里平臺下的網絡應用移植到Windows平臺下。

如果不考慮可移植性(或者所謂的跨平臺性),而是著重于應用的性能時,尤其是注重服務器性能時,對于Windows的程序,都鼓勵使用WinSock2擴展的一些API,更鼓勵使用IOCP模型,因為這個模型是目前Windows平臺上比較完美的一個高性能IO編程模型,它不但適用于SOCKET編程,還適用于讀寫硬盤文件,讀寫和管理命名管道、郵槽等等。如果再結合Windows線程池,IOCP幾乎可以利用當今硬件所有可能的新特性(比如多核,DMA,高速總線等等),本身具有先天的擴展性和可用性。

今天討論的重點就是SOCKET池。很多VC程序員也許對SOCKET池很陌生,也有些可能很熟悉,那么這里就先討論下這個概念。

在Windows平臺上SOCKET實際上被視作一個內核對象的句柄,很多Windows API在支持傳統的HANDLE參數的同時也支持SOCKET,比如有名的CreateIoCompletionPort就支持將SOCKET句柄代替HANDLE參數傳入并調用。熟悉Windows內核原理的讀者,立刻就會發現,這樣的話,我們創建和銷毀一個SOCKET句柄,實際就是在系統內部創建了一個內核對象,對于Windows來說這牽扯到從Ring3層到Ring0層的耗時操作,再加上復雜的安全審核機制,實際創建和銷毀一個SOCKET內核對象的成本還是蠻高的。尤其對于一些面向連接的SOCKET應用,服務端往往要管理n多個代表客戶端通信的SOCKET對象,而且因為客戶的變動性,主要面臨的大量操作除了一般的收發數據,剩下的就是不斷創建和銷毀SOCKET句柄,對于一個頻繁接入和斷開的服務器應用來說,創建和銷毀SOCKET的性能代價立刻就會體現出來,典型的例如WEB服務器程序,就是一個需要頻繁創建和銷毀SOCKET句柄的SOCKET應用。這種情況下我們通常都希望對于斷開的SOCKET對象,不是簡單的“銷毀”了之(很多時候“斷開”的含義不一定就等價于“銷毀”,可以仔細思考一下),更多時候希望能夠重用這個SOCKET對象,這樣我們甚至可以事先創建一批SOCKET對象組成一個“池”,在需要的時候“重用”其中的SOCKET對象,不需要的時候將SOCKET對象重新丟入池中即可,這樣就省去了頻繁創建銷毀SOCKET對象的性能損失。在原始的“Berkeley”套接字模型中,想做到這點是沒有什么辦法的。而幸運的是在Windows平臺上,尤其是支持WinSock2的平臺上,已經提供了一套完整的API接口用于支持SOCKET池。

對于符合以上要求的SOCKET池,首先需要做到的就是對SOCKET句柄的“回收”,因為創建函數無論在那個平臺上都是現成的,而最早能夠實現這個功能的WinSock函數就是TransmitFile,如果代替closesocket函數像下面這樣調用就可以“回收”一個SOCKET句柄,而不是銷毀:(注意“回收”這個功能對于TransmitFile函數來說只是個“副業”。)

TransmitFile(hSocket,NULL,0,0,NULL,NULL,TF_DISCONNECT | TF_REUSE_SOCKET );

注意上面函數的最后一個參數,使用了標志TF_DISCONNECT和TF_REUSE_SOCKET,第一個值表示斷開,第二個值則明確的表示“重用”實際上也就是回收這個SOCKET,經過這個處理的SOCKET句柄,就可以直接再用于connect等操作,但是此時我們會發現,這個回收來的SOCKET似乎沒什么用,因為其他套接字函數沒法直接利用這個回收來的SOCKET句柄。

這時就要WinSock2的一組專用API上場了。我將它們按傳統意義上的服務端和客戶端分為兩組:

一、???????? 服務端:

SOCKET WSASocket(

? __in????????? int af,

? __in????????? int type,

? __in????????? int protocol,

? __in????????? LPWSAPROTOCOL_INFO lpProtocolInfo,

? __in???????? ?GROUP g,

? __in????????? DWORD dwFlags

);

BOOL AcceptEx(

? __in????????? SOCKET sListenSocket,

? __in????????? SOCKET sAcceptSocket,

? __in????????? PVOID lpOutputBuffer,

? __in????????? DWORD dwReceiveDataLength,

? __in????????? DWORD dwLocalAddressLength,

? __in????????? DWORD dwRemoteAddressLength,

? __out???????? LPDWORD lpdwBytesReceived,

? __in????????? LPOVERLAPPED lpOverlapped

);

BOOL DisconnectEx(

? __in????????? SOCKET hSocket,

? __in????????? LPOVERLAPPED lpOverlapped,

? __in????????? DWORD dwFlags,

? __in????????? DWORD reserved

);

二、???????? 客戶端:

SOCKET WSASocket(

? __in????????? int af,

? __in????????? int type,

? __in????????? int protocol,

? __in????????? LPWSAPROTOCOL_INFO lpProtocolInfo,

? __in????????? GROUP g,

? __in????????? DWORD dwFlags

);

BOOL PASCAL ConnectEx(

? __in????????? SOCKET s,

? __in????????? const struct sockaddr* name,

? __in????????? int namelen,

? __in_opt????? PVOID lpSendBuffer,

? __in????????? DWORD dwSendDataLength,

? __out???????? LPDWORD lpdwBytesSent,

? __in????????? LPOVERLAPPED lpOverlapped

);

BOOL DisconnectEx(

? __in????????? SOCKET hSocket,

? __in????????? LPOVERLAPPED lpOverlapped,

? __in????????? DWORD dwFlags,

? __in????????? DWORD reserved

);

注意觀察這些函數,似乎和傳統的“Berkeley”套接字模型中的一些函數“大同小異”,其實仔細觀察他們的參數,就已經可以發現一些調用他們的“玄機”了。

首先我們來看AcceptEx函數,與accept函數不同,它需要兩個SOCKET句柄作為參數,頭一個參數的含義與accept函數的相同,而第二個參數的意思就是accept函數返回的那個代表與客戶端通信的SOCKET句柄,在傳統的accept內部,實際在返回那個代表客戶端的SOCKET時,是在內部調用了一個SOCKET的創建動作,先創建這個SOCKET然后再“accept”讓它變成代表客戶端連接的SOCKET,而AcceptEx函數就在這里“擴展”(實際上是“閹割”才對)accept函數,省去了內部那個明顯的創建SOCKET的動作,而將這個創建動作交給最終的調用者自己來實現。AcceptEx要求調用者創建好那個sAcceptSocket句柄然后傳進去,這時我們立刻發現,我們回收的那個SOCKET是不是也可以傳入呢?答案是肯定的,我們就是可以利用這個函數傳入那個“回收”來的SOCKET句柄,最終實現服務端的SOCKET重用。

這里需要注意的就是,AcceptEx函數必須工作在非阻塞的IOCP模型下,同時即使AcceptEx函數返回了,也不代表客戶端連接進來或者連接成功了,我們必須依靠它的“完成通知”才能知道這個事實,這也是AcceptEx函數區別于accept這個阻塞方式函數的最大之處。通常可以利用AcceptEx的非阻塞特性和IOCP模型的優點,一次可以“預先”發出成千上萬個AcceptEx調用,“等待”客戶端的連接。對于習慣了accept阻塞方式的程序員來說,理解AcceptEx的工作方式還是需要費一些周折的。下面的例子就演示了如何一次調用多個AcceptEx:

//批量創建SOCKET,并調用對應的AcceptEx

for(UINT i = 0; i < 1000; i++)

{//調用1000次

//創建與客戶端通訊的SOCKET,注意SOCKET的創建方式

skAccept = ::WSASocket(AF_INET,

?????????????????? SOCK_STREAM,

?????????????????? IPPROTO_TCP,

?????????????????? NULL,

?????????????????? 0,

?????????????????? WSA_FLAG_OVERLAPPED);

if (INVALID_SOCKET == skAccept)

{

? ? throw CGRSException((DWORD)WSAGetLastError());

}

//創建一個自定義的OVERLAPPED擴展結構,使用IOCP方式調用

pAcceptOL = new CGRSOverlappedData(GRS_OP_ACCEPT

,this,skAccept,NULL);

pAddrBuf = pAcceptOL->GetAddrBuf();

//4、發出AcceptEx調用

//注意將AcceptEx函數接收連接數據緩沖的大小設定成了0,這將導致此函數立即返回,雖然與

//不設定成0的方式而言,這導致了一個較低下的效率,但是這樣提高了安全性,所以這種效率

//犧牲是必須的

if(!AcceptEx(m_skServer,

?????????????????? skAccept,

?????????????????? pAddrBuf->m_pBuf,

?????????????????? 0,//將接收緩沖置為0,令AcceptEx直接返回,防止拒絕服務攻擊

?????????????????? GRS_ADDRBUF_SIZE,

?????????????????? GRS_ADDRBUF_SIZE,

?????????????????? NULL,

?????????????????? (LPOVERLAPPED)pAcceptOL))

{

int iError = WSAGetLastError();

if( ERROR_IO_PENDING != iError

???? && WSAECONNRESET != iError )

{

???? if(INVALID_SOCKET != skAccept)

???? {

??????? ?::closesocket(skAccept);

??????? ?skAccept = INVALID_SOCKET;

???? }

? ?? if( NULL != pAcceptOL)

???? {

???????????? GRS_ISVALID(pAcceptOL,sizeof(CGRSOverlappedData));

delete pAcceptOL;

???? pAcceptOL = NULL;

???? }

? }

}

}

以上的例子只是簡單的演示了AcceptEx的調用,還沒有涉及到真正的“回收重用”這個主題,那么下面的例子就演示了如何重用一個SOCKET句柄:

if(INVALID_SOCKET == skClient)

{

throw CGRSException(_T("SOCKET句柄是無效的!"));

}

OnPreDisconnected(skClient,pUseData,0);

CGRSOverlappedData*pData

= new GRSOverlappedData(GRS_OP_DISCONNECTEX

,this,skClient,pUseData);

//回收而不是關閉后再創建大大提高了服務器的性能

DisconnectEx(skClient,&pData->m_ol,TF_REUSE_SOCKET,0);?

......

????? //在接收到DisconnectEx函數的完成通知之后,我們就可以重用這個SOCKET了

CGRSAddrbuf*pBuf = NULL;

pNewOL = new CGRSOverlappedData(GRS_OP_ACCEPT

,this,skClient,pUseData);

pBuf = pNewOL->GetAddrBuf();

//把這個回收的SOCKET重新丟進連接池

if(!AcceptEx(m_skServer,skClient,pBuf->m_pBuf,

???????????????? 0,//將接收緩沖置為0,令AcceptEx直接返回,防止拒絕服務攻擊

???????????????? GRS_ADDRBUF_SIZE, GRS_ADDRBUF_SIZE,

???????????????? NULL,(LPOVERLAPPED)pNewOL))

{

int iError = WSAGetLastError();

?? ?if( ERROR_IO_PENDING != iError

????? ? && WSAECONNRESET != iError )

?? ?{

?? ???? throw CGRSException((DWORD)iError);

?? ? }

}

//注意在這個SOCKET被重新利用后,重新與IOCP綁定一下,該操作會返回一個已設置的錯誤,這個錯誤直接被忽略即可

::BindIoCompletionCallback((HANDLE)skClient

,Server_IOCPThread, 0);

?

至此回收重用SOCKET的工作也就結束了,以上的過程實際理解了IOCP之后就比較好理解了,例子的最后我們使用了BindIoCompletionCallback函數重新將SOCKET丟進了IOCP線程池中,實際還可以再次使用CreateIoCompletionPort函數達到同樣的效果,這里列出這一步就是告訴大家,不要忘了再次綁定一下完成端口和SOCKET。

?? ?對于客戶端來說,可以使用ConnectEx函數來代替connect函數,與AcceptEx函數相同,ConnectEx函數也是以非阻塞的IOCP方式工作的,唯一要注意的就是在WSASocket調用之后,在ConnectEx之前要調用一下bind函數,將SOCKET提前綁定到一個本地地址端口上,當然回收重用之后,就無需再次綁定了,這也是ConnectEx較之connect函數高效的地方之一。

?? 與AcceptEx函數類似,也可以一次發出成千上萬個ConnectEx函數的調用,可以連接到不同的服務器,也可以連接到相同的服務器,連接到不同的服務器時,只需提供不同的sockaddr即可。

?? ?通過上面的例子和講解,大家應該對SOCKET池概念以及實際的應用有個大概的了解了,當然核心仍然是理解了IOCP模型,否則還是寸步難行。

在上面的例子中,回收SOCKET句柄主要使用了DisconnectEx函數,而不是之前介紹的TransmitFile函數,為什么呢?因為TransmitFile函數在一些情況下會造成死鎖,無法正常回收SOCKET,畢竟不是專業的回收重用SOCKET函數,我就遇到過好幾次死鎖,最后偶然的發現了DisconnectEx函數這個專用的回收函數,調用之后發現比TransmitFile專業多了,而且不管怎樣都不會死鎖。

最后需要補充的就是這幾個函數的調用方式,不能像傳統的SOCKET API那樣直接調用它們,而需要使用一種間接的方式來調用,尤其是AcceptEx和DisconnectEx函數,下面給出了一個例子類,用于演示如何動態載入這些函數并調用之:

class CGRSMsSockFun

{

public:

CGRSMsSockFun(SOCKET skTemp = INVALID_SOCKET)

{

???? if( INVALID_SOCKET != skTemp )

???? {

?????? LoadAllFun(skTemp);

???? ?}

}

public:

virtual ~CGRSMsSockFun(void)

{

}

protected:

BOOL LoadWSAFun(SOCKET& skTemp,GUID&funGuid,void*&pFun)

{

???? DWORD dwBytes = 0;

???? BOOL bRet = TRUE;

???? pFun = NULL;

???? BOOL bCreateSocket = FALSE;

???? try

???? {

?????? if(INVALID_SOCKET == skTemp)

?????? {

????????? skTemp = ::WSASocket(AF_INET,SOCK_STREAM,

???????????? IPPROTO_TCP,NULL,0,WSA_FLAG_OVERLAPPED);

bCreateSocket = (skTemp != INVALID_SOCKET);

?????? }

if(INVALID_SOCKET == skTemp)

?????? {

????????? throw CGRSException((DWORD)WSAGetLastError());

?????? }

?????? if(SOCKET_ERROR == ::WSAIoctl(skTemp,

??????????????? SIO_GET_EXTENSION_FUNCTION_POINTER,

??????????????? &funGuid,sizeof(funGuid),

??????????????? &pFun,sizeof(pFun),&dwBytes,NULL,

??????????????? NULL))

?????? {

???????????? pFun = NULL;

???????????? throw CGRSException((DWORD)WSAGetLastError());

?????? }

? }

? catch(CGRSException& e)

? {

???? ?if(bCreateSocket)

???? ?{

?????? ?::closesocket(skTemp);

???? ?}

? }

? return NULL != pFun;

}

protected:

LPFN_ACCEPTEX m_pfnAcceptEx;

LPFN_CONNECTEX m_pfnConnectEx;

LPFN_DISCONNECTEX m_pfnDisconnectEx;

LPFN_GETACCEPTEXSOCKADDRS m_pfnGetAcceptExSockaddrs;

LPFN_TRANSMITFILE m_pfnTransmitfile;

LPFN_TRANSMITPACKETS m_pfnTransmitPackets;

LPFN_WSARECVMSG m_pfnWSARecvMsg;

protected:

BOOL LoadAcceptExFun(SOCKET &skTemp)

{

???? GUID GuidAcceptEx = WSAID_ACCEPTEX;

???? return LoadWSAFun(skTemp,GuidAcceptEx

,(void*&)m_pfnAcceptEx);

}

BOOL LoadConnectExFun(SOCKET &skTemp)

{

???? GUID GuidAcceptEx = WSAID_CONNECTEX;

???? return LoadWSAFun(skTemp,GuidAcceptEx

,(void*&)m_pfnConnectEx);

}

BOOL LoadDisconnectExFun(SOCKET&skTemp)

{

???? GUID GuidDisconnectEx = WSAID_DISCONNECTEX;

???? return LoadWSAFun(skTemp,GuidDisconnectEx

,(void*&)m_pfnDisconnectEx);

}

BOOL LoadGetAcceptExSockaddrsFun(SOCKET &skTemp)

{

???? GUID GuidGetAcceptExSockaddrs

= WSAID_GETACCEPTEXSOCKADDRS;

???? return LoadWSAFun(skTemp,GuidGetAcceptExSockaddrs

,(void*&)m_pfnGetAcceptExSockaddrs);

}

BOOL LoadTransmitFileFun(SOCKET&skTemp)

{

???? GUID GuidTransmitFile = WSAID_TRANSMITFILE;

???? return LoadWSAFun(skTemp,GuidTransmitFile

,(void*&)m_pfnTransmitfile);

}

BOOL LoadTransmitPacketsFun(SOCKET&skTemp)

{

???? GUID GuidTransmitPackets = WSAID_TRANSMITPACKETS;

???? return LoadWSAFun(skTemp,GuidTransmitPackets

,(void*&)m_pfnTransmitPackets);

}

BOOL LoadWSARecvMsgFun(SOCKET&skTemp)

{

???? GUID GuidTransmitPackets = WSAID_TRANSMITPACKETS;

???? return LoadWSAFun(skTemp,GuidTransmitPackets

,(void*&)m_pfnWSARecvMsg);

}

public:

BOOL LoadAllFun(SOCKET skTemp)

{//注意這個地方的調用順序,是根據服務器的需要,并結合了表達式副作用

? //而特意安排的調用順序

? return (LoadAcceptExFun(skTemp) &&

???????????? LoadGetAcceptExSockaddrsFun(skTemp) &&

???????????? LoadTransmitFileFun(skTemp) &&

???????????? LoadTransmitPacketsFun(skTemp) &&

???????????? LoadDisconnectExFun(skTemp) &&

???????????? LoadConnectExFun(skTemp) &&

???????????? LoadWSARecvMsgFun(skTemp));

}

?

public:

GRS_FORCEINLINE BOOL AcceptEx (

????????? SOCKET sListenSocket,

????????? SOCKET sAcceptSocket,

????????? PVOID lpOutputBuffer,

????????? DWORD dwReceiveDataLength,

????????? DWORD dwLocalAddressLength,

????????? DWORD dwRemoteAddressLength,

????????? LPDWORD lpdwBytesReceived,

????????? LPOVERLAPPED lpOverlapped

????????? )

{

???? GRS_ASSERT(NULL != m_pfnAcceptEx);

???? return m_pfnAcceptEx(sListenSocket,

???????????? sAcceptSocket,lpOutputBuffer,

???????????? dwReceiveDataLength,dwLocalAddressLength,

???? ??????? dwRemoteAddressLength,lpdwBytesReceived,

???????????? lpOverlapped);

}

GRS_FORCEINLINE BOOL ConnectEx(

????????? SOCKET s,const struct sockaddr FAR *name,

????????? int namelen,PVOID lpSendBuffer,

????????? DWORD dwSendDataLength,LPDWORD lpdwBytesSent,

????????? LPOVERLAPPED lpOverlapped

????????? )

{

???? GRS_ASSERT(NULL != m_pfnConnectEx);

???? return m_pfnConnectEx(

???????????? s,name,namelen,lpSendBuffer,

???????????? dwSendDataLength,lpdwBytesSent,

???????????? lpOverlapped

???????????? );

}

GRS_FORCEINLINE BOOL DisconnectEx(

????????? SOCKET s,LPOVERLAPPED lpOverlapped,

????????? DWORD? dwFlags,DWORD? dwReserved

????????? )

{

???? GRS_ASSERT(NULL != m_pfnDisconnectEx);

???? return m_pfnDisconnectEx(s,

???????????? lpOverlapped,dwFlags,dwReserved);

}

GRS_FORCEINLINE VOID GetAcceptExSockaddrs (

????????? PVOID lpOutputBuffer,

????????? DWORD dwReceiveDataLength,

????????? DWORD dwLocalAddressLength,

????????? DWORD dwRemoteAddressLength,

????????? sockaddr **LocalSockaddr,

????????? LPINT LocalSockaddrLength,

????????? sockaddr **RemoteSockaddr,

????????? LPINT RemoteSockaddrLength

????????? )

{

???? GRS_ASSERT(NULL != m_pfnGetAcceptExSockaddrs);

???? return m_pfnGetAcceptExSockaddrs(

????????? lpOutputBuffer,dwReceiveDataLength,

????????? dwLocalAddressLength,dwRemoteAddressLength,

????????? LocalSockaddr,LocalSockaddrLength,

????????? RemoteSockaddr,RemoteSockaddrLength

????????? );

}

GRS_FORCEINLINE BOOL TransmitFile(

???? SOCKET hSocket,HANDLE hFile,

???? DWORD nNumberOfBytesToWrite,

???? DWORD nNumberOfBytesPerSend,

???? LPOVERLAPPED lpOverlapped,

???? LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,

???? DWORD dwReserved

???? )

{

???? GRS_ASSERT(NULL != m_pfnTransmitfile);

???? return m_pfnTransmitfile(

???????????? hSocket,hFile,nNumberOfBytesToWrite,

???????????? nNumberOfBytesPerSend,lpOverlapped,

???????????? lpTransmitBuffers,dwReserved

???????????? );

}

GRS_FORCEINLINE BOOL TransmitPackets(

???? SOCKET hSocket,????????????????????????????

???? LPTRANSMIT_PACKETS_ELEMENT lpPacketArray,???????????????????? ??????????

???? DWORD nElementCount,DWORD nSendSize,???????????????

???? LPOVERLAPPED lpOverlapped,DWORD dwFlags??????????????????????????????

???? )

{

???? GRS_ASSERT(NULL != m_pfnTransmitPackets);

???? return m_pfnTransmitPackets(

???????????? hSocket,lpPacketArray,nElementCount,

nSendSize,lpOverlapped,dwFlags

???????????? );

}

GRS_FORCEINLINE INT WSARecvMsg(

????????? SOCKET s,LPWSAMSG lpMsg,

????????? LPDWORD lpdwNumberOfBytesRecvd,

????????? LPWSAOVERLAPPED lpOverlapped,

????????? LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine

????????? )

{

???? GRS_ASSERT(NULL != m_pfnWSARecvMsg);

???? return m_pfnWSARecvMsg(

???????????? s,lpMsg,lpdwNumberOfBytesRecvd,

???????????? lpOverlapped,lpCompletionRoutine

???????????? );

}

/*WSAID_ACCEPTEX

? WSAID_CONNECTEX

? WSAID_DISCONNECTEX

? WSAID_GETACCEPTEXSOCKADDRS

? WSAID_TRANSMITFILE

? WSAID_TRANSMITPACKETS

? WSAID_WSARECVMSG

? WSAID_WSASENDMSG */

};

這個類的使用非常簡單,只需要聲明一個類的對象,然后調用其成員AcceptEx、DisconnectEx函數等即可,參數與這些函數的MSDN聲明方式完全相同,除了本文中介紹的這些函數外,這個類還包含了很多其他的Winsock2函數,那么都應該按照這個類中演示的這樣來動態載入后再行調用,如果無法載入通常說明你的環境中沒有Winsock2函數庫,或者是你初始化的不是2.0版的Winsock環境。

這個類是本人完整類庫的一部分,如要使用需要自行修改一些地方,如果不知如何修改或遇到什么問題,可以直接跟帖說明,我會不定期回答大家的問題,這個類可以免費使用、分發、修改,可以用于任何商業目的,但是對于使用后引起的任何問題,本人概不負責,有問題請跟帖。關于AcceptEx以及其他一些函數,包括本文中沒有介紹到得函數,我會在后續的一些專題文章中進行詳細深入的介紹,敬請期待。如果你有什么疑問,或者想要了解什么也請跟帖說明,我會在后面的文章中盡量說明。

總結

以上是生活随笔為你收集整理的WinSock2编程之打造完整的SOCKET池的全部內容,希望文章能夠幫你解決所遇到的問題。

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

成人久久久电影 | 国产精品成 | 久久免费的精品国产v∧ | av免费在线网 | 日本一区二区三区免费观看 | a级片网站| www.在线观看av | 久久久999| 国产福利一区二区三区在线观看 | av在线网站大全 | 日本一区二区三区免费看 | 91福利视频网站 | 欧美精品久久久久久久久老牛影院 | 国产在线精品视频 | 日韩欧美在线第一页 | 99热手机在线观看 | 日韩av成人在线观看 | 亚洲精区二区三区四区麻豆 | 久久好看免费视频 | 五月天婷婷视频 | 国产精品18久久久久久久网站 | 九九在线视频 | 91丨九色丨蝌蚪丨对白 | 欧美在线视频一区二区 | 国产视频二 | 四虎永久免费在线观看 | 婷婷在线精品视频 | 探花国产在线 | 亚洲精品在线观看av | 91精品在线免费 | 久久夜靖品 | 婷婷色5月 | 五月视频 | 7799av| 91精品系列 | 天堂网av 在线 | 欧美日韩国产一区二区三区在线观看 | 国产精品久久久久av福利动漫 | 免费精品| 操操日 | 黄色一级动作片 | 免费亚洲电影 | 欧美a在线免费观看 | 在线免费黄色 | 伊人婷婷网 | 久久国产综合视频 | 国产精品久久久久永久免费观看 | 天堂av在线网站 | 中文字幕免费观看 | 九九在线视频免费观看 | 亚洲欧美精品在线 | 天天干天天上 | 午夜成人免费影院 | 深夜免费小视频 | 国产精品精品国产婷婷这里av | 超碰在线观看97 | 亚洲一级黄色大片 | 国产精品麻豆99久久久久久 | 国产一级淫片在线观看 | 免费三级网 | 91麻豆精品 | 国产色在线视频 | 天天射天天做 | 成人h动漫在线看 | 黄色大片av| 四虎国产| 伊人干综合 | 国产精品久久久久一区二区 | 香蕉视频18 | 九色视频网站 | 五月婷久| 国产三级av在线 | 91人人澡人人爽人人精品 | 国产91在线 | 美洲 | 国产一性一爱一乱一交 | 中文字幕av免费 | 九九久久免费视频 | 91热视频 | 精品一区精品二区 | 亚洲视频免费视频 | 91黄视频在线观看 | 午夜精品久久久久久中宇69 | 亚洲国产精品视频在线观看 | 国产日韩欧美中文 | 午夜精品久久久久久久99 | 亚洲午夜不卡 | 91在线视频免费91 | 午夜精品久久久久久久99无限制 | 在线观看免费av片 | 亚洲天堂va | 国产精品1区2区 | 草在线| 久久国产精品一区二区三区 | 国产97在线播放 | 亚洲片在线观看 | 91新人在线观看 | 青春草视频在线播放 | 免费视频国产 | 午夜视频在线瓜伦 | 国产区在线看 | 亚洲小视频在线 | 91精品国产乱码久久桃 | 一区在线观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 日韩精品一区二区三区免费观看 | 玖玖在线播放 | 久久亚洲精品国产亚洲老地址 | 欧洲一区二区在线观看 | 天天色棕合合合合合合 | 精品99久久久久久 | 国产高清视频免费 | 丁香六月五月婷婷 | 一本大道久久精品懂色aⅴ 五月婷社区 | 91在线免费视频 | 中文字幕av最新更新 | 99热手机在线 | 日日干美女 | 91福利区一区二区三区 | 国产精品乱码久久 | 久久亚洲欧美日韩精品专区 | 日韩欧美极品 | 国产精品久久久久久久久搜平片 | 日韩视频免费在线观看 | 天天射天天舔天天干 | av黄色大片 | 99热这里只有精品免费 | 久久精品99 | a成人v在线 | 亚洲精品在线免费观看视频 | 国产日本在线观看 | 视频成人永久免费视频 | 狠狠操狠狠操 | 中文字幕一区av | 超碰97在线资源站 | 天堂av一区二区 | 欧美一级片在线 | 日本爱爱免费视频 | 99热在线免费观看 | 婷婷色在线观看 | 免费男女羞羞的视频网站中文字幕 | 91探花国产综合在线精品 | 福利视频午夜 | 摸阴视频 | 九九在线免费视频 | 久久久久久亚洲精品 | 国产一区黄色 | 精品久久久久久久久久久久久久久久 | 在线看小早川怜子av | 久草精品在线观看 | 亚洲欧美综合精品久久成人 | 东方av在线免费观看 | 亚洲午夜精品一区二区三区电影院 | 狠狠躁日日躁狂躁夜夜躁av | 五月婷婷色 | 99精品国产免费久久久久久下载 | 五月激情婷婷丁香 | 插久久| 亚洲精品久久久蜜桃 | 成年人看片| 99精品视频一区 | 一区二区三区在线观看 | 日韩黄色在线电影 | 永久中文字幕 | 色综合五月天 | 黄色一级大片免费看 | 精品一区二区久久久久久久网站 | 国产福利专区 | 久久九九影视网 | www蜜桃视频 | 又色又爽又黄 | 在线免费观看羞羞视频 | 成人黄色小说在线观看 | 99热在线国产 | 欧美精品乱码久久久久 | 久久久www成人免费精品张筱雨 | 手机av在线免费观看 | 国产三级精品三级在线观看 | 日日干狠狠操 | 狠狠色丁香 | 久久成人毛片 | 日韩av影片在线观看 | 999久久久国产精品 高清av免费观看 | 狠狠干夜夜爽 | 中文字幕一区二区三区久久蜜桃 | 国产精品成人免费精品自在线观看 | 在线免费观看av网站 | 国产亚洲欧美一区 | 日韩免费一级电影 | 国产精品免费视频网站 | 在线观看你懂的网址 | 国产精品porn | jizz欧美性9 国产一区高清在线观看 | 这里只有精彩视频 | 国产99免费 | 91精品视频在线播放 | 欧美午夜久久久 | 午夜精品一区二区三区免费 | 干干夜夜| 在线最新av | 久久久久综合精品福利啪啪 | 2019中文字幕第一页 | 亚洲综合欧美日韩狠狠色 | av一区二区在线观看中文字幕 | 九九免费精品视频 | 最近中文字幕免费视频 | 国产黄色a | 国产精品第54页 | 久久综合九色九九 | 国产欧美三级 | 亚洲精品国产拍在线 | 国产91免费在线观看 | 人人超碰人人 | 色综合久久久网 | 超碰在线最新网址 | 国产在线看一区 | 蜜臀久久99静品久久久久久 | 欧美大香线蕉线伊人久久 | 日日日日日 | 成人蜜桃网 | 亚洲狠狠干 | 成人动漫一区二区三区 | 91爱看片| 91在线视频免费观看 | 欧美视频www | 中文字幕精品久久 | 日韩中文字幕在线看 | 天天干天天怕 | 在线观看资源 | 国产理论免费 | 国产午夜精品av一区二区 | 黄色软件视频大全免费下载 | 国产剧情在线一区 | 久久九九久久九九 | 在线亚洲播放 | 91av在| 国产在线看一区 | 久久激情五月激情 | 亚洲国产中文字幕 | 香蕉在线观看视频 | 久久成年人视频 | 天天干天天操天天搞 | 国产精品亚州 | 久久久人人人 | av中文字幕不卡 | 狠狠色噜噜狠狠 | 国内精品久久久久久久久久 | 国产精品成久久久久 | 91成年人在线观看 | 狠狠色丁香| 国产精品无 | 国产精品毛片一区视频播 | 日韩免费视频一区二区 | 91精品入口| 丁香花在线视频观看免费 | 亚洲国产三级在线观看 | 伊在线视频 | 久久久久亚洲精品中文字幕 | 国精产品999国精产 久久久久 | 天天操夜夜爱 | 免费看三级网站 | 亚洲在线精品 | 午夜久久福利 | 精品国产伦一区二区三区 | 91av在线精品 | 国产韩国日本高清视频 | 天天干天天操天天入 | 国产一区二区精品久久91 | 日韩一级片网址 | 视频精品一区二区三区 | 中文字幕高清在线 | 成人一级在线 | 国产免费黄色 | 久久夜色网 | 日韩成人欧美 | 亚洲欧美乱综合图片区小说区 | 亚洲精品永久免费视频 | 91精品啪在线观看国产 | 免费久久99精品国产婷婷六月 | 99精品在线免费在线观看 | 99精品视频在线播放免费 | 在线观看亚洲精品视频 | 久久久www成人免费精品张筱雨 | 成人免费一区二区三区在线观看 | 日韩免费在线 | 天天插天天狠天天透 | 久久伊人色综合 | 一区中文字幕电影 | 香蕉视频一级 | 国产探花视频在线播放 | 天天拍天天干 | 五月婷久久 | 久久综合免费视频 | 精品黄色片 | 亚洲国产片色 | 成人在线观看免费视频 | 免费视频一区 | 中文字幕在线高清 | 色噜噜噜噜 | 五月婷婷激情五月 | 娇妻呻吟一区二区三区 | 国产视频一级 | 久久婷婷一区二区三区 | 久久久久久久久久久久国产精品 | 免费无遮挡动漫网站 | 欧美精品一区二区在线播放 | 久久超 | av在线8| 9999在线视频 | 久久成人高清 | 久久精品视频观看 | 国产91精品看黄网站在线观看动漫 | 久久久久亚洲天堂 | 久久久久免费精品视频 | 欧美日高清视频 | www亚洲视频 | 久久福利影视 | 国产精品久久嫩一区二区免费 | 人人爱人人射 | 国产麻豆精品免费视频 | 国产精品成久久久久 | 91爱爱网址 | 97电影网手机版 | 国产精品国产三级国产不产一地 | 成人午夜免费剧场 | 国产成人精品999在线观看 | 精品久久1 | 一区二区三区在线观看免费 | 免费久久久久久久 | 日产乱码一二三区别在线 | 99精品成人 | 中文字幕五区 | 三上悠亚一区二区在线观看 | 911国产 | 日韩精品一区二区三区免费视频观看 | 久久久午夜电影 | 国产黑丝一区二区 | 91丨九色丨国产在线 | 亚洲美女免费视频 | 四虎最新入口 | 国产精品久久久久久影院 | 日韩精品视频免费在线观看 | 在线免费观看不卡av | 国产精品视频免费在线观看 | 天天插综合 | 九色精品免费永久在线 | 欧美动漫一区二区三区 | 久久9精品 | 日韩啪视频 | 四虎4hu永久免费 | 久久精品欧美视频 | 精品国模一区二区三区 | 久久视频在线观看免费 | 香蕉精品在线观看 | 久久99电影 | 99中文视频在线 | 999视频在线观看 | 亚洲va欧美va | 亚洲欧洲一级 | 中文字幕av免费 | 中文字幕一区在线观看视频 | 国产精品一区二区在线观看 | 狠狠ri | 91精品国自产在线 | 在线观看免费中文字幕 | 日韩欧美一区视频 | 国产四虎在线 | 99爱视频在线观看 | 国产精品18久久久久久久 | 91夫妻视频 | 最近中文字幕免费视频 | 免费男女网站 | 狠狠干成人 | 日韩精品免费一线在线观看 | 国产 一区二区三区 在线 | 在线亚洲人成电影网站色www | 亚洲精品综合欧美二区变态 | 五月开心激情网 | 欧美一区二区在线免费看 | 日韩免费观看一区二区三区 | 国产日韩欧美中文 | 亚洲精品免费观看视频 | 成人小视频在线免费观看 | 久久久久久久久久久影院 | 国产成人免费在线 | 国内精品国产三级国产aⅴ久 | 亚洲午夜精品一区二区三区电影院 | 免费日韩三级 | 日韩一三区| 亚洲永久av | 欧美极品xxxxx | 久免费视频 | 日b黄色片| 激情导航 | 在线观看视频在线观看 | 日韩欧三级 | 中文字幕你懂的 | 欧美激情视频一区二区三区免费 | 久久a v视频 | 五月婷婷在线视频观看 | 人人舔人人干 | 成人动漫视频在线 | 在线观看国产一区二区 | 欧美日韩在线电影 | 日本成人黄色片 | 爱爱一区 | 在线导航av | 亚洲精品乱码久久久久久蜜桃动漫 | 久久久久久久久电影 | av大片免费| 精品国产乱码久久久久久1区二区 | av中文在线 | 亚洲第一伊人 | av成人亚洲 | 久久久国产在线视频 | 国产成人av在线影院 | 91久久人澡人人添人人爽欧美 | 亚洲成av人片在线观看无 | 久久免费视频国产 | 久久精品综合视频 | 婷婷久久一区二区三区 | 99综合电影在线视频 | 热久久国产精品 | 99热最新在线 | 欧美大片在线观看一区 | 亚洲电影第一页av | 国产自在线观看 | 9999在线观看 | 亚洲日本欧美 | 亚洲aⅴ一区二区三区 | 美女福利视频一区二区 | 91在线观看视频网站 | 97成人资源站 | 国产一级片一区二区三区 | 免费能看的黄色片 | 黄色在线观看免费网站 | 国内视频在线观看 | 久久你懂的 | 久久都是精品 | 国产免费影院 | 色播五月激情五月 | 日韩免费观看高清 | 久久久这里有精品 | 91在线看免费| 中文字幕电影高清在线观看 | 91在线免费播放视频 | 亚洲免费av一区二区 | 久久精品欧美日韩精品 | 久久精品成人热国产成 | 97精品国产手机 | 成人三级网址 | 成年人在线免费看 | 日韩专区在线播放 | 日本中文字幕在线一区 | 日韩av黄 | 一区二区三区在线观看 | 亚洲伊人网在线观看 | 日韩精品免费在线观看视频 | 欧美日韩综合在线观看 | 久久久久久免费 | 久久艹影院 | 亚洲一区在线看 | 2018精品视频| 欧美一级日韩免费不卡 | 永久精品视频 | 天天色成人网 | 免费在线观看av片 | 久久免费国产 | 欧美 国产 视频 | 成人全视频免费观看在线看 | 国产视频97 | 天天天操天天天干 | 91中文字幕在线播放 | 91麻豆精品国产91 | 国产99在线 | 亚洲人成综合 | 国产精品粉嫩 | 久久精品国产久精国产 | 日韩啪啪小视频 | www.婷婷色| 久久av伊人| 99亚洲精品在线 | 天天天天天天干 | 伊人久久一区 | 欧美成a人片在线观看久 | 天天色图| 97色在线观看免费视频 | 日日干干夜夜 | 日产乱码一二三区别免费 | 中文字幕高清有码 | 手机av在线不卡 | 国产亚洲激情视频在线 | 91成人免费在线视频 | 国产成人亚洲在线观看 | 精品久久久久久综合日本 | 久久99精品国产99久久 | 国产精品区一区 | 成人免费在线电影 | 久久成年人网站 | 天天综合色天天综合 | 黄色动态图xx | 日韩激情视频在线观看 | 久久精品国产免费观看 | 成 人 黄 色视频免费播放 | 久久色中文字幕 | 日韩超碰| 美女很黄免费网站 | 91精品国产成人www | 日韩动漫免费观看高清完整版在线观看 | 国产精品videoxxxx | 日韩精品高清视频 | 亚洲欧美999| 中文字幕电影一区 | 91久久黄色 | 亚洲精品国产精品国 | 日韩理论在线视频 | 免费十分钟 | 成人丁香花 | 免费在线观看视频a | 国产精品成人免费一区久久羞羞 | 成人一级在线观看 | 在线天堂中文在线资源网 | 久久黄色精品视频 | 欧美日韩免费在线视频 | 超碰97人人在线 | 国产精品一区在线观看 | 亚洲激情在线播放 | 欧美大片在线看免费观看 | 国语自产偷拍精品视频偷 | 草久在线播放 | 在线观看国产麻豆 | 麻豆精品视频在线观看免费 | 婷婷色5月 | av女优中文字幕在线观看 | 久久在线精品 | 日韩va在线观看 | 四虎免费在线观看视频 | 99精品久久只有精品 | 亚洲欧洲成人精品av97 | 亚洲手机av| 久久激情视频网 | 又黄又爽又湿又无遮挡的在线视频 | 狠狠躁天天躁综合网 | av观看在线观看 | 日韩在线视频网址 | 欧美a级免费视频 | 国产精品白丝av | 久久天堂亚洲 | 国产视频资源 | 96av视频 | 天天翘av| 韩日成人av| 精品国产人成亚洲区 | 人人爽人人爽av | 国产精品午夜8888 | a级国产毛片 | 欧美日韩99| 日韩com| 免费国产在线精品 | 久久久亚洲国产精品麻豆综合天堂 | 黄色软件视频大全免费下载 | 国产特级毛片 | 91九色视频观看 | 久草免费在线视频观看 | www久久精品 | 欧美日韩视频在线观看免费 | 国产乱对白刺激视频在线观看女王 | 欧产日产国产69 | 中文字幕在线观看第一区 | 911在线| 日韩不卡高清视频 | 色综合久久88色综合天天6 | 808电影 | 99久久久成人国产精品 | 国产精品久久久一区二区三区网站 | 国产一级淫片在线观看 | 1区2区视频 | 九九有精品 | 色婷婷丁香 | 日韩av电影网站在线观看 | 国产99久久九九精品免费 | 韩国av一区二区三区在线观看 | 国产在线观看91 | 一区二区理论片 | 亚洲国产合集 | 亚洲精品在线免费看 | 久久久久久综合 | 午夜精品在线看 | 欧美精品少妇xxxxx喷水 | 国产自制av| 亚洲另类久久 | 免费看污在线观看 | 中文字幕av免费 | 国产精品1区2区在线观看 | 91资源在线 | 亚洲美女精品区人人人人 | 一本一道波多野毛片中文在线 | 亚洲一区久久久 | 韩国在线一区二区 | 九9热这里真品2 | 国产福利91精品张津瑜 | 91看片网址 | 亚洲精品视频网站在线观看 | 欧美污在线观看 | 国产精品一区在线观看 | www夜夜| 最近中文字幕高清字幕免费mv | 午夜日b视频 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 欧美国产高清 | 日韩在线视频网站 | 久久理论片 | 欧美aa级| 国产视频2区 | 狠狠操狠狠干2017 | 日日爱av | 狠狠狠狠狠狠狠狠 | 美女网站一区 | 国产精品久久99综合免费观看尤物 | 中文字幕在线不卡国产视频 | 国产精品视频久久 | 免费三级av| 2018亚洲男人天堂 | 天天综合天天综合 | 国产中文伊人 | www.久草.com | av中文国产| 亚洲www天堂com | 免费在线观看黄网站 | 国产高清免费 | 麻豆视频国产 | 欧美在线1区 | 成人动态视频 | 亚洲精品18日本一区app | 亚洲天天干 | 天天曰天天 | 天天操福利视频 | 天天干一干 | 亚洲综合小说 | 黄色天堂在线观看 | 黄色三级免费看 | 日日夜夜综合 | 欧美精品国产综合久久 | 久久久黄视频 | 中文字幕之中文字幕 | 久久影视一区二区 | 国产精品视频你懂的 | 婷婷午夜 | 日韩精品最新在线观看 | 国产第一页在线播放 | 久久网页 | 91av看片 | 一级黄色片在线观看 | 91精品啪在线观看国产 | 91 中文字幕 | 亚洲成人精品 | 久久久精品一区二区 | 国产免费三级在线观看 | 成人av手机在线 | 69精品视频在线观看 | 狠狠综合久久av | 亚洲精品美女久久17c | 五月天电影免费在线观看一区 | 国产色拍| 国产在线播放一区二区 | 色综合中文综合网 | 国产精品一区二 | 波多野结衣一区二区 | 国产99爱| 中文字幕资源在线观看 | 久青草视频 | 色综合色综合久久综合频道88 | 国内99视频 | 欧美男男激情videos | 国产午夜精品久久久久久久久久 | 日本中文不卡 | 久久久国产精品人人片99精片欧美一 | 91色视频| 久久视频6 | 亚洲精品视频免费 | 99久久99久久精品国产片果冰 | 欧洲亚洲女同hd | 国产一区二区三区免费在线观看 | 一级片在线 | 国产精品中文字幕在线播放 | 国产精品h在线观看 | 久久久久久久久久久久久久av | 亚洲五月 | 国内丰满少妇猛烈精品播放 | 天天激情天天干 | 99久久精品无码一区二区毛片 | 日韩电影在线一区 | 欧美黄在线| 六月丁香色婷婷 | 国产精品麻豆免费版 | 亚洲劲爆av | 狠狠狠色丁香婷婷综合久久五月 | 欧洲视频一区 | 国产精品videossex国产高清 | 国产一区二区三区高清播放 | 91精品在线视频观看 | 亚洲成av人片在线观看www | 亚洲黄色一级大片 | 三级av免费 | 美女网站在线观看 | 日日碰狠狠添天天爽超碰97久久 | 欧美成人影音 | 正在播放 国产精品 | 久久毛片网站 | 91成人破解版 | 亚洲视频六区 | 国产黄色片一级 | 国产视频在线一区二区 | 日韩特黄一级欧美毛片特黄 | 久久精品成人欧美大片古装 | 97视频久久久 | 久久久久免费看 | 黄色电影网站在线观看 | 中文免费在线观看 | 在线国产91| 国产日韩精品欧美 | 国产亚洲综合性久久久影院 | 狠狠干激情 | 在线涩涩| 日本99干网 | 天天操福利视频 | 国语精品久久 | 欧美成人精品欧美一级乱黄 | 99视频99 | 在线电影播放 | 久久精品在线免费观看 | 在线观看不卡视频 | 激情五月婷婷综合 | 蜜臀91丨九色丨蝌蚪老版 | 手机av电影在线观看 | 国产麻豆精品在线观看 | 天天艹天天操 | 国产一线在线 | 国产五月婷 | 国产九色视频在线观看 | 综合色综合 | 国产麻豆成人传媒免费观看 | 久久久久久久久久久久久久电影 | 亚洲精品人人 | 91av蜜桃| 91精品国产九九九久久久亚洲 | 青青河边草免费观看 | 日本中文字幕高清 | 国产精品婷婷午夜在线观看 | 伊人中文网 | 波多野结衣最新 | 日韩精品一区二区三区丰满 | 青草视频在线免费 | 久久成年人网站 | 精品在线你懂的 | 国产精品成久久久久三级 | 伊人黄| 国产视频日韩视频欧美视频 | 精品在线观看一区二区 | 99国产精品视频免费观看一公开 | 中文字幕一区二区在线观看 | 久久激情婷婷 | 欧美极品xxx | av九九| 久久视频网 | 亚洲精品免费视频 | 国产精品大片在线观看 | 激情视频区 | 国产 欧美 日产久久 | 国产成人精品一区二区三区福利 | 欧美一级特黄aaaaaa大片在线观看 | 国产精品99视频 | 国产精品永久久久久久久久久 | 在线观看中文 | 五月天婷亚洲天综合网鲁鲁鲁 | 深爱婷婷 | 亚洲国产日韩在线 | 成 人 免费 黄 色 视频 | 日韩二区在线播放 | 成人免费色 | 日本精品二区 | 久久视频在线 | 一区在线观看 | 欧美日韩国产综合网 | 韩国av免费 | 日本久久久久久久久久久 | 国产精品青草综合久久久久99 | 久久小视频 | 五月天久久婷婷 | 高潮久久久 | 欧美一区二区三区在线看 | 丁香一区二区 | 国产日韩在线播放 | 免费三级影片 | 日韩精品在线免费观看 | 久久精品成人 | 久久免费国产精品1 | 五月天久久精品 | 婷婷视频在线观看 | 色99中文字幕 | 国产一级片免费视频 | 国产亚洲精品免费 | 日韩免费视频在线观看 | 亚洲精品高清一区二区三区四区 | 久久久久欠精品国产毛片国产毛生 | av噜噜噜在线播放 | 干综合网 | 免费在线观看视频一区 | 日韩在线观看中文字幕 | 国产又粗又硬又爽视频 | 中文在线a∨在线 | 久久色在线播放 | 福利视频导航网址 | 日日夜夜精品免费 | 九九久久免费 | 99精品国产在热久久下载 | 成人免费大片黄在线播放 | 亚洲狠狠操 | 91av在线不卡 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 日日弄天天弄美女bbbb | 亚洲午夜久久久综合37日本 | 国色天香在线观看 | 国产精品久久久久永久免费看 | 一区免费视频 | 免费看高清毛片 | 中文字幕精品在线 | 国产一级片播放 | 成人cosplay福利网站 | 97网| 久久久精品综合 | 亚洲综合丁香 | 国产精品美女毛片真酒店 | 在线免费av播放 | 色综合久久悠悠 | 成年性视频 | 国产在线观看不卡 | 超碰最新网址 | 久要激情网 | 欧美色888| 99久热在线精品视频成人一区 | 最近中文字幕在线中文高清版 | 国产 中文 日韩 欧美 | 久久永久免费 | 天天干com | 免费热情视频 | 天天天天天天天操 | 国产99久久久国产 | 91资源在线| 亚洲视频,欧洲视频 | 91成版人在线观看入口 | 久久免费精品一区二区三区 | 久久精品久久精品久久精品 | 天天爱天天射天天干天天 | 亚洲人xxx | 麻豆影视网站 | 亚洲一区二区91 | 亚洲电影久久久 | 毛片基地黄久久久久久天堂 | 日韩aⅴ视频 | 日韩激情在线视频 | 久久成人国产精品一区二区 | 中文字幕精品一区二区精品 | 欧美色噜噜 | 中文字幕国产一区 | 啪啪精品 | 成人午夜影视 | 亚洲黄色a| 国产成人精品一区二区三区 | 天天五月天色 | 2022久久国产露脸精品国产 | 欧美成a人片在线观看久 | 精品久久国产精品 | 亚洲 欧美 变态 国产 另类 | 手机成人免费视频 | 欧美日韩免费一区 | 狠狠久久伊人 | 日日天天 | 综合精品在线 | 免费看黄色毛片 | 久久精品欧美一区二区三区麻豆 | 免费黄色一区 | 99综合电影在线视频 | 亚洲国产一区二区精品专区 | 亚洲综合色视频 | 免费看的国产视频网站 | 亚洲国产网址 | 免费中文字幕在线观看 | 五月综合色婷婷 | 欧美男女爱爱视频 | 国产人成看黄久久久久久久久 | 国产资源在线视频 | 欧美性黑人 | 91亚洲国产成人久久精品网站 | 日本精品视频免费 | 中文字幕一区二区三区在线视频 | 狠狠干夜夜操天天爽 | 精品免费一区 | 激情久久网| 夜夜视频 | 日韩精品在线播放 | 国产黄色在线观看 | 爱情影院aqdy鲁丝片二区 | 麻豆视频在线 | 久久久久综合精品福利啪啪 | 久久婷亚洲五月一区天天躁 | 天天综合成人 | 久久午夜网 | 久久99亚洲网美利坚合众国 | 激情伊人 | 91视频 - 88av| 亚洲无人区小视频 | 超薄丝袜一二三区 | 国产一级高清视频 | 超碰大片| 91免费版在线观看 | 日韩av电影一区 | 91精品啪在线观看国产线免费 | 黄色三级免费网址 | 国产精品永久在线观看 | 日韩三级视频在线看 | 成人久久18免费网站 | 日本激情动作片免费看 | 91亚洲视频在线观看 | 蜜臀av.com | 久久久久久久久久久久电影 | 韩日视频在线 | 国产手机视频精品 | 日韩成人免费电影 | 欧美成人性战久久 | 久久久久久久久久久久久久av | 最近日本韩国中文字幕 | 国产精品高潮呻吟久久久久 | 色综合天天在线 | 免费在线观看亚洲视频 | 日韩精品一区二区三区中文字幕 | 黄色a视频免费 | 婷婷久久久 | 天天色天天射天天干 | 夜夜夜影院 | 欧美日韩亚洲在线 | 欧美性爽爽 | 极品久久久 | 少妇性aaaaaaaaa视频 | 久久国产二区 | 黄色网址av | 亚洲精品一区二区18漫画 | 午夜精品视频一区二区三区在线看 | 亚洲精品国产精品99久久 | 久久99这里只有精品 | 99视频+国产日韩欧美 | 成年人三级网站 | 亚洲动漫在线观看 | 99国产情侣在线播放 | 中文字幕在线观看亚洲 | 一区二区久久 | 久久成年人网站 | 久久久久成人精品免费播放动漫 | 福利视频网站 | 国产精品久久嫩一区二区免费 | 国产精品免费麻豆入口 | 在线看国产 | 精品国产一区二区三区男人吃奶 | 伊人成人精品 | 狠狠久久综合 | 视频福利在线观看 | 一区二区三区电影在线播 | 国产午夜不卡 | www.大网伊人 | 五月天色中色 | 久久久久久久久久免费视频 | 在线小视频国产 | 97精品国产一二三产区 | 久久综合国产伦精品免费 | 国产99久久久精品视频 | 九色免费视频 | 亚洲 欧洲 国产 精品 | 国产精品大片在线观看 | www.五月激情.com | 国产午夜亚洲精品 | 午夜精品福利影院 | 国产不卡精品 | 久久er99热精品一区二区三区 | 天天操天天操天天爽 | 亚洲六月丁香色婷婷综合久久 | 91香蕉视频污在线 | 日韩免费在线观看视频 | 国产精品一区二区av麻豆 | 久久99亚洲精品久久久久 | 欧美在线不卡一区 | 国产一级三级 | 精品国产三级 | 日日夜夜网站 | 六月激情| 韩国av电影网 | 91在线一区二区 | 久久久久 | 国产麻豆剧传媒免费观看 | 91香蕉视频在线下载 |