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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mysocket.cpp

?? socket 編程實例 singleServerMultipleClientSrc
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
        }
	}
    catch(myException& excp)
	{
		excp.response();
		exit(1);
	}
    return sendBuf;
}    

int mySocket::getReceiveBufSize()
{
    int rcvBuf;
    int myOptionLen = sizeof(rcvBuf);

	try 
	{
		if ( getsockopt(socketId,SOL_SOCKET,SO_RCVBUF,(char *)&rcvBuf,&myOptionLen) == -1 )
		{
			#ifdef WINDOWS_XP
				int errorCode;
				string errorMsg = "get RCVBUF option: ";
				detectErrorGetSocketOption(&errorCode,errorMsg);
				myException socketOptionException(errorCode,errorMsg);
				throw socketOptionException;
			#endif

			#ifdef UNIX
				myException unixSocketOptionException = new myException(0,"unix: error getting host by name");
				throw unixSocketOptionException;
			#endif
        }
	}
    catch(myException& excp)
	{
		excp.response();
		exit(1);
	}
    return rcvBuf;
}

#ifdef WINDOWS_XP
void mySocket::detectErrorOpenWinSocket(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("Successful WSAStartup must occur before using this function.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem or the associated service provider has failed.");
	else if ( *errCode == WSAEAFNOSUPPORT )
		errMsg.append("The specified address family is not supported.");
	else if ( *errCode == WSAEINPROGRESS )
		errMsg.append("A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.");
	else if ( *errCode == WSAEMFILE )
		errMsg.append("No more socket descriptors are available.");
	else if ( *errCode == WSAENOBUFS )
		errMsg.append("No buffer space is available. The socket cannot be created.");
	else if ( *errCode == WSAEPROTONOSUPPORT )
		errMsg.append("The specified protocol is not supported.");
	else if ( *errCode == WSAEPROTOTYPE )
		errMsg.append("The specified protocol is the wrong type for this socket.");
	else if ( *errCode == WSAESOCKTNOSUPPORT )
		errMsg.append("The specified socket type is not supported in this address family.");
	else errMsg.append("unknown problems!");
}

void mySocket::detectErrorSetSocketOption(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("A successful WSAStartup must occur before using this function.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem has failed.");
	else if ( *errCode == WSAEFAULT )
		errMsg.append("optval is not in a valid part of the process address space or optlen parameter is too small.");
	else if ( *errCode == WSAEINPROGRESS )
		errMsg.append("A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.");
	else if ( *errCode == WSAEINVAL )
		errMsg.append("level is not valid, or the information in optval is not valid.");
	else if ( *errCode == WSAENETRESET )
		errMsg.append("Connection has timed out when SO_KEEPALIVE is set.");
	else if ( *errCode == WSAENOPROTOOPT )
		errMsg.append("The option is unknown or unsupported for the specified provider or socket (see SO_GROUP_PRIORITY limitations).");
	else if ( *errCode == WSAENOTCONN )
		errMsg.append("Connection has been reset when SO_KEEPALIVE is set.");
	else if ( *errCode == WSAENOTSOCK )
		errMsg.append("The descriptor is not a socket.");
	else errMsg.append("unknown problem!");
}

void mySocket::detectErrorGetSocketOption(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("A successful WSAStartup must occur before using this function.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem has failed.");
	else if ( *errCode == WSAEFAULT )
		errMsg.append("One of the optval or the optlen parameters is not a valid part of the user address space, or the optlen parameter is too small.");
	else if ( *errCode == WSAEINPROGRESS )
		errMsg.append("A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.");
	else if ( *errCode == WSAEINVAL )
		errMsg.append("The level parameter is unknown or invalid.");
	else if ( *errCode == WSAENOPROTOOPT )
		errMsg.append("The option is unknown or unsupported by the indicated protocol family.");
	else if ( *errCode == WSAENOTSOCK )
		errMsg.append("The descriptor is not a socket.");

	else errMsg.append("unknown problems!");
}

#endif

ostream& operator<<(ostream& io,mySocket& s)
{
	string flagStr = "";

	io << endl;
	io << "Summary of socket settings:" << endl;
	io << "   Socket Id:     " << s.getSocketId() << endl;
	io << "   port #:        " << s.getPortNumber() << endl;
	io << "   debug:         " << (flagStr = s.getDebug()? "true":"false" ) << endl;
	io << "   reuse addr:    " << (flagStr = s.getReuseAddr()? "true":"false" ) << endl;
	io << "   keep alive:    " << (flagStr = s.getKeepAlive()? "true":"false" ) << endl;
	io << "   send buf size: " << s.getSendBufSize() << endl;
	io << "   recv bug size: " << s.getReceiveBufSize() << endl;
	io << "   blocking:      " << (flagStr = s.getSocketBlocking()? "true":"false" ) << endl;
	io << "   linger on:     " << (flagStr = s.getLingerOnOff()? "true":"false" ) << endl;
	io << "   linger seconds: " << s.getLingerSeconds() << endl;
	io << endl;
	return io;
}

myTcpSocket::~myTcpSocket()
{
#ifdef WINDOWS_XP
    // Close the winsock library
	winLog << endl << "system shut down ...";		
	try 
	{
		if (WSACleanup())
		{
			myException cleanupException(0,"Error: calling WSACleanup()");
			throw cleanupException;
        }
	}
	catch(myException& excp)
	{
		excp.response();
		exit(1);
	}
	winLog << "successful" << endl;
#endif
}

void myTcpSocket::initialize()
{
#ifdef WINDOWS_XP
	WSADATA wsaData;
    winLog << "system started ..." << endl;
	winLog << endl << "initialize the winsock library ... ";
	try 
	{
		if (WSAStartup(0x101, &wsaData))
		{
			myException initializationException(0,"Error: calling WSAStartup()");
			throw initializationException;
        }
	}
	catch(myException& excp)
	{
		excp.response();
		exit(1);
	}
	winLog << "successful" << endl;
#endif
}

void myTcpSocket::bindSocket()
{
	try
	{
		if (bind(socketId,(struct sockaddr *)&clientAddr,sizeof(struct sockaddr_in))==-1)
		{
			#ifdef WINDOWS_XP
				int errorCode = 0;
				string errorMsg = "error calling bind(): \n";
				detectErrorBind(&errorCode,errorMsg);
				myException socketBindException(errorCode,errorMsg);
				throw socketBindException;
			#endif
			#ifdef UNIX
				myException unixSocketBindException(0,"unix: error calling bind()");
				throw unixSocketBindException;
			#endif
        }
	}
    catch(myException& excp)
	{
		excp.response();
		exit(1);
	}
}

#ifdef WINDOWS_XP

void myTcpSocket::detectErrorBind(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("A successful WSAStartup must occur before using this function.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem has failed.");
	else if ( *errCode == WSAEADDRINUSE )
	{
		errMsg.append("A process on the machine is already bound to the same\n");
		errMsg.append("fully-qualified address and the socket has not been marked\n"); 
		errMsg.append("to allow address re-use with SO_REUSEADDR. For example,\n");
		errMsg.append("IP address and port are bound in the af_inet case");
	}
	else if ( *errCode == WSAEADDRNOTAVAIL )
		errMsg.append("The specified address is not a valid address for this machine.");
	else if ( *errCode == WSAEFAULT )
	{
		errMsg.append("The name or the namelen parameter is not a valid part of\n");
		errMsg.append("the user address space, the namelen parameter is too small,\n");
		errMsg.append("the name parameter contains incorrect address format for the\n");
		errMsg.append("associated address family, or the first two bytes of the memory\n");
		errMsg.append("block specified by name does not match the address family\n");
		errMsg.append("associated with the socket descriptor s.");
	}
	else if ( *errCode == WSAEINPROGRESS )
	{
		errMsg.append("A blocking Windows Sockets 1.1 call is in progress, or the\n");
		errMsg.append("service provider is still processing a callback function.");
	}
	else if ( *errCode == WSAEINVAL )
		errMsg.append("The socket is already bound to an address. ");
	else if ( *errCode == WSAENOBUFS )
		errMsg.append("Not enough buffers available, too many connections.");
	else if ( *errCode == WSAENOTSOCK )
		errMsg.append("The descriptor is not a socket.");
	else errMsg.append("unknown problems!");
}

void myTcpSocket::detectErrorRecv(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("A successful WSAStartup must occur before using this function.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem has failed.");
	else if ( *errCode == WSAEFAULT )
		errMsg.append("The buf parameter is not completely contained in a valid part of the user address space.");
	else if ( *errCode == WSAENOTCONN )
		errMsg.append("The socket is not connected.");
	else if ( *errCode == WSAEINTR )
		errMsg.append("The (blocking) call was canceled through WSACancelBlockingCall.");
	else if ( *errCode == WSAEINPROGRESS )
	{
		errMsg.append("A blocking Windows Sockets 1.1 call is in progress, or the\n");
		errMsg.append("service provider is still processing a callback function.");
	}
	else if ( *errCode == WSAENETRESET )
	{
		errMsg.append("The connection has been broken due to the keep-alive activity\n");
		errMsg.append("detecting a failure while the operation was in progress.");
	}
	else if ( *errCode == WSAENOTSOCK )
		errMsg.append("The descriptor is not a socket.");
	else if ( *errCode == WSAEOPNOTSUPP )
	{
		errMsg.append("MSG_OOB was specified, but the socket is not stream-style\n");
		errMsg.append("such as type SOCK_STREAM, out-of-band data is not supported\n");
		errMsg.append("in the communication domain associated with this socket, or\n");
		errMsg.append("the socket is unidirectional and supports only send operations.");
	}
	else if ( *errCode == WSAESHUTDOWN )
	{
		errMsg.append("The socket has been shut down; it is not possible to recv on a\n");
		errMsg.append("socket after shutdown has been invoked with how set to SD_RECEIVE or SD_BOTH.");
	}
	else if ( *errCode == WSAEWOULDBLOCK )
		errMsg.append("The socket is marked as nonblocking and the receive operation would block.");
	else if ( *errCode == WSAEMSGSIZE )
		errMsg.append("The message was too large to fit into the specified buffer and was truncated.");
	else if ( *errCode == WSAEINVAL )
	{
		errMsg.append("The socket has not been bound with bind, or an unknown flag\n");
		errMsg.append("was specified, or MSG_OOB was specified for a socket with\n");
		errMsg.append("SO_OOBINLINE enabled or (for byte stream sockets only) len was zero or negative.");
	}
	else if ( *errCode == WSAECONNABORTED )
	{
		errMsg.append("The virtual circuit was terminated due to a time-out or\n");
		errMsg.append("other failure. The application should close the socket as it is no longer usable.");
	}
	else if ( *errCode == WSAETIMEDOUT )
	{
		errMsg.append("The connection has been dropped because of a network\n");
		errMsg.append("failure or because the peer system failed to respond.");
	}
	else if ( *errCode == WSAECONNRESET )
	{
		errMsg.append("The virtual circuit was reset by the remote side executing a\n");
		errMsg.append("\"hard\" or \"abortive\" close. The application should close\n");
		errMsg.append("the socket as it is no longer usable. On a UDP datagram socket\n");
		errMsg.append("this error would indicate that a previous send operation\n");
		errMsg.append("resulted in an ICMP \"Port Unreachable\" message.");
	}
	else errMsg.append("unknown problems!");
}

void myTcpSocket::detectErrorConnect(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("A successful WSAStartup must occur before using this function.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem has failed.");
	else if ( *errCode == WSAEADDRINUSE )
	{
		errMsg.append("The socket's local address is already in use and the socket\n");
		errMsg.append("was not marked to allow address reuse with SO_REUSEADDR. This\n");
		errMsg.append("error usually occurs when executing bind, but could be delayed\n");
		errMsg.append("until this function if the bind was to a partially wild-card\n");
		errMsg.append("address (involving ADDR_ANY) and if a specific address needs\n");
		errMsg.append("to be committed at the time of this function.");
	}
	else if ( *errCode == WSAEINTR )
		errMsg.append("The (blocking) Windows Socket 1.1 call was canceled through WSACancelBlockingCall.");
	else if ( *errCode == WSAEINPROGRESS )
	{
		errMsg.append("A blocking Windows Sockets 1.1 call is in progress, or\n");
		errMsg.append("the service provider is still processing a callback function.");
	}
	else if ( *errCode == WSAEALREADY )
	{
		errMsg.append("A nonblocking connect call is in progress on the specified socket.\n");
		errMsg.append("Note In order to preserve backward compatibility, this error is\n");
		errMsg.append("reported as WSAEINVAL to Windows Sockets 1.1 applications that\n");
		errMsg.append("link to either WINSOCK.DLL or WSOCK32.DLL.");
	}
	else if ( *errCode == WSAEADDRNOTAVAIL )
		errMsg.append("The remote address is not a valid address (such as ADDR_ANY).");
	else if ( *errCode == WSAEAFNOSUPPORT )
		errMsg.append("Addresses in the specified family cannot be used with this socket.");
	else if ( *errCode == WSAECONNREFUSED )
		errMsg.append("The attempt to connect was forcefully rejected.");
	else if ( *errCode == WSAEFAULT )
	{
		errMsg.append("The name or the namelen parameter is not a valid part of\n");
		errMsg.append("the user address space, the namelen parameter is too small,\n");
		errMsg.append("or the name parameter contains incorrect address format for\n");
		errMsg.append("the associated address family.");
	}
	else if ( *errCode == WSAEINVAL )
	{
		errMsg.append("The parameter s is a listening socket, or the destination\n");
		errMsg.append("address specified is not consistent with that of the constrained\n");
		errMsg.append("group the socket belongs to.");
	}
	else if ( *errCode == WSAEISCONN )
		errMsg.append("The socket is already connected (connection-oriented sockets only).");
	else if ( *errCode == WSAENETUNREACH )
		errMsg.append("The network cannot be reached from this host at this time.");
	else if ( *errCode == WSAENOBUFS )
		errMsg.append("No buffer space is available. The socket cannot be connected.");
	else if ( *errCode == WSAENOTSOCK )
		errMsg.append("The descriptor is not a socket.");
	else if ( *errCode == WSAETIMEDOUT )
		errMsg.append("Attempt to connect timed out without establishing a connection.");
	else if ( *errCode == WSAEWOULDBLOCK )
	{
		errMsg.append("The socket is marked as nonblocking and the connection\n");
		errMsg.append("cannot be completed immediately.");
	}
	else if ( *errCode == WSAEACCES )
	{
		errMsg.append("Attempt to connect datagram socket to broadcast address failed\n");
		errMsg.append("because setsockopt option SO_BROADCAST is not enabled.");
	}
	else errMsg.append("unknown problems!");
}

void myTcpSocket::detectErrorAccept(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("A successful WSAStartup must occur before using this FUNCTION.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem has failed.");
	else if ( *errCode == WSAEFAULT )
		errMsg.append("The addrlen parameter is too small or addr is not a valid part of the user address space.");
	else if ( *errCode == WSAEINTR )
		errMsg.append("A blocking Windows Sockets 1.1 call was canceled through WSACancelBlockingCall.");
	else if ( *errCode == WSAEINPROGRESS )
	{
		errMsg.append("A blocking Windows Sockets 1.1 call is in progress, or the\n");
		errMsg.append("service provider is still processing a callback function.");
	}
	else if ( *errCode == WSAEINVAL )
		errMsg.append("The listen function was not invoked prior to accept.");
	else if ( *errCode == WSAEMFILE )
		errMsg.append("The queue is nonempty upon entry to accept and there are no descriptors available.");
	else if ( *errCode == WSAENOBUFS )
		errMsg.append("No buffer space is available.");
	else if ( *errCode == WSAENOTSOCK )
		errMsg.append("The descriptor is not a socket.");
	else if ( *errCode == WSAEOPNOTSUPP )
		errMsg.append("The referenced socket is not a type that supports connection-oriented service.");
	else if ( *errCode == WSAEWOULDBLOCK )
		errMsg.append("The socket is marked as nonblocking and no connections are present to be accepted.");
	else errMsg.append("unknown problems!");
}

void myTcpSocket::detectErrorListen(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("A successful WSAStartup must occur before using this function.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem has failed.");
	else if ( *errCode == WSAEADDRINUSE )
	{
		errMsg.append("The socket's local address is already in use and the socket was\n");
		errMsg.append("not marked to allow address reuse with SO_REUSEADDR. This error\n");
		errMsg.append("usually occurs during execution of the bind function, but could\n");
		errMsg.append("be delayed until this function if the bind was to a partially\n");
		errMsg.append("wild-card address (involving ADDR_ANY) and if a specific address\n");
		errMsg.append("needs to be \"committed\" at the time of this function.");
	}
	else if ( *errCode == WSAEINPROGRESS )
	{
		errMsg.append("A blocking Windows Sockets 1.1 call is in progress, or the service\n");
		errMsg.append("provider is still processing a callback function.");
	}
	else if ( *errCode == WSAEINVAL )
		errMsg.append("The socket has not been bound with bind.");
	else if ( *errCode == WSAEISCONN )
		errMsg.append("The socket is already connected.");
	else if ( *errCode == WSAEMFILE )
		errMsg.append("No more socket descriptors are available.");
	else if ( *errCode == WSAENOBUFS )
		errMsg.append("No buffer space is available.");
	else if ( *errCode == WSAENOTSOCK )
		errMsg.append("The descriptor is not a socket.");
	else if ( *errCode == WSAEOPNOTSUPP )
		errMsg.append("The referenced socket is not of a type that supports the listen operation.");
	else errMsg.append("unknown problems!");
}

void myTcpSocket::detectErrorSend(int* errCode,string& errMsg)
{
	*errCode = WSAGetLastError();

	if ( *errCode == WSANOTINITIALISED )
		errMsg.append("A successful WSAStartup must occur before using this function.");
	else if ( *errCode == WSAENETDOWN )
		errMsg.append("The network subsystem has failed.");
	else if ( *errCode == WSAEACCES )
	{
		errMsg.append("The requested address is a broadcast address,\n");
		errMsg.append("but the appropriate flag was not set. Call setsockopt\n");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产sm最大网站免费看| 国产日韩亚洲欧美综合| 久久久久久**毛片大全| 一区二区三区在线视频观看| 国产自产高清不卡| 欧美日韩精品一区二区| 国产精品国产成人国产三级 | 制服丝袜中文字幕一区| 国产精品麻豆欧美日韩ww| 婷婷国产在线综合| 色综合久久中文字幕| 久久综合九色综合欧美98| 日日夜夜免费精品视频| 91女厕偷拍女厕偷拍高清| 久久免费看少妇高潮| 日本中文一区二区三区| 欧美最猛性xxxxx直播| 中文字幕五月欧美| 成人免费视频播放| 久久夜色精品国产噜噜av| 丝袜诱惑制服诱惑色一区在线观看 | 无码av免费一区二区三区试看| 国产丶欧美丶日本不卡视频| 日韩你懂的电影在线观看| 亚洲成人激情av| 欧美视频中文一区二区三区在线观看| 自拍偷自拍亚洲精品播放| 国产成人精品亚洲777人妖| 精品欧美一区二区久久| 久久爱www久久做| 欧美精品一区二区在线观看| 黄网站免费久久| 久久嫩草精品久久久精品| 国产一区二区三区黄视频| 久久精品欧美日韩| 国产精品系列在线观看| 中文字幕av一区二区三区高| 国产91色综合久久免费分享| 国产精品久久久久久亚洲毛片 | 欧美精品tushy高清| 亚洲成av人片www| 欧美精品自拍偷拍动漫精品| 日韩电影免费一区| 精品久久国产字幕高潮| 国产乱子轮精品视频| 中文天堂在线一区| 91麻豆免费看| 亚洲高清在线精品| 日韩欧美区一区二| 国产美女精品人人做人人爽| 国产精品久久久久aaaa| 色综合激情五月| 免费成人深夜小野草| 久久综合狠狠综合久久激情| www.av精品| 婷婷激情综合网| 国产欧美1区2区3区| 日本乱码高清不卡字幕| 日韩**一区毛片| 国产欧美日韩在线看| 欧美在线短视频| 精品在线观看视频| 亚洲视频1区2区| 日韩免费视频一区| 99久久精品免费看国产| 日韩电影一区二区三区| 久久久不卡网国产精品一区| 91香蕉视频mp4| 六月丁香婷婷色狠狠久久| 国产精品久久久久精k8| 欧美日韩激情在线| 成人伦理片在线| 亚洲高清中文字幕| 国产精品麻豆久久久| 91精品国产福利在线观看 | 国内外精品视频| 亚洲成人在线网站| 国产精品―色哟哟| 日韩欧美国产午夜精品| 日本道色综合久久| 成人网在线免费视频| 日韩成人av影视| 亚洲精品成人天堂一二三| 精品国产3级a| 91精品久久久久久蜜臀| 91免费在线播放| 国产老肥熟一区二区三区| 欧美r级在线观看| 精品视频一区二区不卡| 成人黄色一级视频| 精品无码三级在线观看视频| 天天综合网天天综合色| 亚洲精品久久7777| 国产精品久久久久久久蜜臀| 日韩精品最新网址| 欧美日产在线观看| 欧美日韩一区在线| 欧美色大人视频| 91黄色激情网站| 色综合久久久久| 成人av免费观看| 成人爽a毛片一区二区免费| 老司机一区二区| 久久99精品一区二区三区三区| 亚洲第一成年网| 亚洲伊人色欲综合网| 综合欧美亚洲日本| 亚洲日本丝袜连裤袜办公室| 中文字幕亚洲不卡| 亚洲特级片在线| 成人欧美一区二区三区小说| 国产精品色婷婷| 中文字幕在线一区免费| 国产精品久久久久久久久动漫 | 91亚洲精品久久久蜜桃网站| www..com久久爱| 97精品视频在线观看自产线路二| k8久久久一区二区三区| 成人av影视在线观看| 成人福利视频在线看| 成人动漫视频在线| 91在线你懂得| 欧美色综合久久| 欧美丰满美乳xxx高潮www| 91精品国产综合久久久久久 | 色av成人天堂桃色av| 欧亚一区二区三区| 91精品一区二区三区久久久久久 | 欧美三级在线播放| 777欧美精品| 久久人人超碰精品| 国产精品不卡一区| 亚洲精品视频免费看| 亚洲国产精品天堂| 日本在线不卡视频| 国产高清视频一区| 日本道精品一区二区三区| 欧美一级日韩免费不卡| 久久久久久久久久久久久久久99| 欧美经典一区二区三区| 一区二区久久久久| 蜜桃av噜噜一区二区三区小说| 国产精品99久久久久久宅男| 99re在线精品| 欧美一二三区精品| 国产精品久久毛片| 午夜精品久久久久久| 国产99久久精品| 在线视频一区二区三区| 欧美成人乱码一区二区三区| 中文字幕精品一区二区精品绿巨人 | 欧美电影影音先锋| 国产欧美日韩视频一区二区| 亚洲影院免费观看| 国产成人av一区二区三区在线| 91国偷自产一区二区开放时间| 精品精品欲导航| 一区二区三区四区乱视频| 精品中文字幕一区二区| 91久久精品一区二区三| 久久久影视传媒| 亚洲成人精品一区二区| 成人精品小蝌蚪| 欧美一区二区美女| 成人欧美一区二区三区| 免费视频一区二区| 在线观看三级视频欧美| 日本一区二区三级电影在线观看| 亚洲va韩国va欧美va精品| 成人av电影观看| 2023国产一二三区日本精品2022| 亚洲国产中文字幕| 成人h动漫精品一区二| 精品国产伦一区二区三区观看方式 | 久久一区二区三区四区| 亚洲va天堂va国产va久| 成人黄页毛片网站| 2023国产精品视频| 日韩不卡免费视频| 欧美视频在线观看一区| 亚洲视频一区二区在线观看| 国产麻豆视频一区二区| 欧美日韩mp4| 日韩精品亚洲专区| 欧美亚一区二区| 亚洲欧洲日韩av| 成人免费视频免费观看| 国产喂奶挤奶一区二区三区| 久久精品国产999大香线蕉| 69精品人人人人| 亚洲午夜影视影院在线观看| 欧洲生活片亚洲生活在线观看| 国产精品久久久久一区二区三区| 国产美女久久久久| 国产喂奶挤奶一区二区三区| 国产美女精品一区二区三区| 亚洲精品在线免费观看视频| 麻豆久久久久久久| 日韩三级电影网址| 国产在线精品一区二区三区不卡 |