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

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

?? te_socket.cpp

?? 用VC編寫的HTTP下載的win32程序
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	}

	// 注冊(cè)FD_CONNECT事件
	if( WSAEventSelect(hSocket, (WSAEVENT) hConnectEvent, FD_CONNECT) == SOCKET_ERROR)
	{
		CloseHandle(hConnectEvent);
		TE_SetLastError( WSAGetLastError() );
		return (SOCKET_ERROR);
	}

	int	iConnectResult = WSAConnect(hSocket, pSocketAddress, iNameLen, NULL, NULL, NULL, NULL);
	int	iConnectError  = WSAGetLastError();
	
	if ((iConnectResult == SOCKET_ERROR) && (iConnectError == WSAEWOULDBLOCK))
	{
		DWORD dwWaitResult = WSAWaitForMultipleEvents(1, &hConnectEvent, TRUE,dwTimeout, TRUE);
		
		if (dwWaitResult != WSA_WAIT_EVENT_0)
		{
			TE_SetLastError( WSAGetLastError() );
			iConnectResult = SOCKET_ERROR;
		}
		else
		{
			////////////////////////////////////////////////////////////// 
			///	注意:即使 dwWaitResult == WSA_WAIT_EVENT0 ,也應(yīng)該 
			///			進(jìn)一步檢查網(wǎng)絡(luò)是否發(fā)生錯(cuò)誤
			///////////////////////////////////////////////////////////////
			WSANETWORKEVENTS NetEvent;
			if(WSAEnumNetworkEvents(hSocket,(WSAEVENT)hConnectEvent,&NetEvent) == SOCKET_ERROR)
			{
				TE_SetLastError( WSAGetLastError() );
				iConnectResult = SOCKET_ERROR;
			}
			else if(NetEvent.iErrorCode[FD_CONNECT_BIT] !=0 )	// 發(fā)生錯(cuò)誤
			{
				TE_SetLastError( NetEvent.iErrorCode[FD_CONNECT_BIT] );
				iConnectResult = SOCKET_ERROR;
			}
			else
				iConnectResult = SOCKET_SUCCESS;
			////////////////////////////////////////////////////////////////
		}
	}

	// 注銷網(wǎng)絡(luò)事件
	WSAEventSelect(hSocket, (WSAEVENT) hConnectEvent, 0);
	CloseHandle(hConnectEvent);
	return (iConnectResult);
}


///////////////////////////////////////////////////////////
//
//	引入該函數(shù)的目的是為了避免NT下對(duì)域名解析的CACHE造成的問(wèn)題
//
///////////////////////////////////////////////////////////
DWORD WINAPI DNSThread(  LPVOID pParam )
{
	DWORD dwIP = INADDR_NONE;
	PHOSTENT pHost = gethostbyname( (char *)pParam );
	if(pHost == NULL)
		return INADDR_NONE;
	dwIP = inet_addr( inet_ntoa(*(IN_ADDR *)*pHost->h_addr_list) );
	return dwIP;
}

DWORD TE_GetIP(const char* name,BOOL fFixNtDNS /* = FALSE*/) // Used to Fix NT DNS Problem
{
	DWORD dwIP = inet_addr(name);
	if( dwIP != INADDR_NONE )
		return dwIP;

	if( fFixNtDNS )
	{
		OSVERSIONINFO		osVersion;
		osVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
		if( GetVersionEx(&osVersion) )
		{
			if(osVersion.dwPlatformId == VER_PLATFORM_WIN32_NT)
			{
				DWORD	dwThreadId = 0;
				HANDLE	hThread = CreateThread(NULL,0,DNSThread,(LPVOID)name,0,&dwThreadId);
				if( hThread != NULL)
				{
					WaitForSingleObject(hThread,INFINITE);
					if( GetExitCodeThread(hThread,&dwIP))
						return dwIP;
				}
			}
		}
	}

	PHOSTENT pHost = gethostbyname(name);
	if(pHost == NULL)
		return INADDR_NONE;
		
	dwIP = inet_addr( inet_ntoa(*(IN_ADDR *)*pHost->h_addr_list) );
	return dwIP;
}

// 建立連接(擴(kuò)展函數(shù))
int TE_ConnectEx(SOCKET hSocket, char const * pszServer, int nPort,DWORD dwTimeout,BOOL fFixNtDNS /*= FALSE*/)
{
	/////////////////////////////////////////////////////////////////////////////
	SOCKADDR_IN sockAddr;
	ZeroMemory(&sockAddr,sizeof(sockAddr));

	sockAddr.sin_family			= AF_INET;
	sockAddr.sin_port			= htons((u_short)nPort);
	sockAddr.sin_addr.s_addr	= TE_GetIP(pszServer,fFixNtDNS);
	
	if (sockAddr.sin_addr.s_addr == INADDR_NONE)
	{
		TE_SetLastError( WSAGetLastError() );
		return (SOCKET_ERROR);
	}
	//////////////////////////////////////////////////////////////////////

	return TE_Connect(hSocket, (SOCKADDR *)&sockAddr,sizeof(sockAddr),dwTimeout);
}
// 綁定套接字
int TE_BindSocket(SOCKET hSocket, const struct sockaddr * SockName, int iNameLen)
{

	if (bind(hSocket, SockName, iNameLen) == SOCKET_ERROR)
	{
		TE_SetLastError( WSAGetLastError() );
		return (SOCKET_ERROR);
	}

	return (SOCKET_SUCCESS);
}

// 綁定套接字
int TE_BindSocketEx(SOCKET hSocket,int nPort)
{
	SOCKADDR_IN sockAddr;
	ZeroMemory(&sockAddr,sizeof(sockAddr));

	sockAddr.sin_family			= AF_INET;
	sockAddr.sin_addr.s_addr	= htonl(INADDR_ANY);
	sockAddr.sin_port			= htons((u_short)nPort);

	return TE_BindSocket(hSocket,(SOCKADDR *)&sockAddr, sizeof(sockAddr));
}


// 監(jiān)聽套接字
int TE_ListenSocket(SOCKET hSocket, int iConnections)
{
	if(listen(hSocket, iConnections) == SOCKET_ERROR)
	{
		TE_SetLastError( WSAGetLastError() );
		return (SOCKET_ERROR);
	}
	
	return (SOCKET_SUCCESS);
}


// 接受套接字連接
SOCKET TE_Accept(SOCKET hSocket, struct sockaddr * pSocketAddress, int *iNameLen,DWORD dwTimeout)
{

	HANDLE hAcceptEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	if (hAcceptEvent == NULL)
	{
		TE_SetLastError( (int)GetLastError() );
		return (INVALID_SOCKET);
	}

	// 注冊(cè)FD_ACCEPT事件
	if( WSAEventSelect(hSocket, (WSAEVENT) hAcceptEvent, FD_ACCEPT) == SOCKET_ERROR)
	{
		CloseHandle(hAcceptEvent);
		TE_SetLastError( WSAGetLastError() );
		return (INVALID_SOCKET);
	}

	SOCKET hSocketAccept = WSAAccept(hSocket, pSocketAddress, iNameLen, NULL, 0);
	int	   iConnectError = WSAGetLastError();

	if ((hSocketAccept == INVALID_SOCKET) && (iConnectError == WSAEWOULDBLOCK))
	{

		// 阻塞
		DWORD dwWaitResult = WSAWaitForMultipleEvents(1, &hAcceptEvent, TRUE,dwTimeout, TRUE);

		if (dwWaitResult == WSA_WAIT_EVENT_0)
		{
			////////////////////////////////////////////////////////////// 
			///	注意:即使 dwWaitResult == WSA_WAIT_EVENT0 ,也應(yīng)該 
			///			進(jìn)一步檢查網(wǎng)絡(luò)是否發(fā)生錯(cuò)誤
			///////////////////////////////////////////////////////////////
			WSANETWORKEVENTS NetEvent;
			if(WSAEnumNetworkEvents(hSocket,hAcceptEvent,&NetEvent) == SOCKET_ERROR)
				TE_SetLastError( WSAGetLastError() );
			else if(NetEvent.iErrorCode[FD_ACCEPT_BIT] !=0 )	// 發(fā)生錯(cuò)誤
				TE_SetLastError( NetEvent.iErrorCode[FD_ACCEPT_BIT] );
			else
				hSocketAccept = WSAAccept(hSocket, pSocketAddress, iNameLen, NULL, 0);
		}
		else
			TE_SetLastError( WSAGetLastError() );
	}
	
	// 注銷網(wǎng)絡(luò)事件
	WSAEventSelect(hSocket, (WSAEVENT) hAcceptEvent, 0);
	CloseHandle(hAcceptEvent);

	if (hSocketAccept != INVALID_SOCKET)
	{
		// 設(shè)置套接字的屬性為地址可重用并且為非阻塞的
		if (	(TE_BlockSocket(hSocketAccept, 0)  == SOCKET_ERROR ) ||
				(TE_SetSocketOption(hSocketAccept) == SOCKET_ERROR ) )
		{
			TE_CloseSocket(hSocketAccept,TRUE);
			return (INVALID_SOCKET);
		}
	}
	return (hSocketAccept);
}

// 接受套接字連接(允許中斷)
SOCKET	TE_AcceptEx(SOCKET hSocket, struct sockaddr * pSockName, int *iNameLen,HANDLE hEndEvent,DWORD dwTimeout /*= TE_DEFAULT_TIMEOUT*/)
{
	if( hEndEvent == NULL)
		return TE_Accept(hSocket,pSockName,iNameLen,dwTimeout);

	HANDLE	hAcceptEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	if (hAcceptEvent == NULL)
	{
		TE_SetLastError( (int)GetLastError() );
		return (INVALID_SOCKET);
	}

	WSAEVENT hEvent[2]; 
	hEvent[0] = (WSAEVENT)hAcceptEvent;
	hEvent[1] = (WSAEVENT)hEndEvent;

	// 注冊(cè)FD_ACCEPT事件
	if( WSAEventSelect(hSocket, (WSAEVENT) hAcceptEvent, FD_ACCEPT) == SOCKET_ERROR)
	{
		CloseHandle(hAcceptEvent);
		TE_SetLastError( WSAGetLastError() );
		return (INVALID_SOCKET);
	}

	SOCKET hSocketAccept = WSAAccept(hSocket, pSockName, iNameLen, NULL, 0);
	int	   iConnectError = WSAGetLastError();

	if ((hSocketAccept == INVALID_SOCKET) && (iConnectError == WSAEWOULDBLOCK))
	{
		// 阻塞
		DWORD dwWaitResult = WSAWaitForMultipleEvents(2, hEvent, FALSE,dwTimeout, TRUE);
		if (dwWaitResult == WSA_WAIT_EVENT_0)
		{
			////////////////////////////////////////////////////////////// 
			///	注意:即使 dwWaitResult == WSA_WAIT_EVENT0 ,也應(yīng)該 
			///			進(jìn)一步檢查網(wǎng)絡(luò)是否發(fā)生錯(cuò)誤
			///////////////////////////////////////////////////////////////
			WSANETWORKEVENTS NetEvent;
			if(WSAEnumNetworkEvents(hSocket,hAcceptEvent,&NetEvent) == SOCKET_ERROR)
				TE_SetLastError( WSAGetLastError() );
			else if(NetEvent.iErrorCode[FD_ACCEPT_BIT] !=0 )	// 發(fā)生錯(cuò)誤
				TE_SetLastError( NetEvent.iErrorCode[FD_ACCEPT_BIT] );
			else
				hSocketAccept = WSAAccept(hSocket, pSockName, iNameLen, NULL, 0);
		}
		else
			TE_SetLastError( WSAGetLastError() );
	}
	
	// 注銷網(wǎng)絡(luò)事件
	WSAEventSelect(hSocket, (WSAEVENT) hAcceptEvent, 0);
	CloseHandle(hAcceptEvent);

	if (hSocketAccept != INVALID_SOCKET)
	{
		// 設(shè)置套接字的屬性為地址可重用并且為非阻塞的
		if (	(TE_BlockSocket(hSocketAccept, 0) < 0) ||
				(TE_SetSocketOption(hSocketAccept) < 0) )
		{
			TE_CloseSocket(hSocketAccept,TRUE);
			return (INVALID_SOCKET);
	
		}
	}
	return (hSocketAccept);

}

// 設(shè)置套接字是否為阻塞的
int      TE_BlockSocket(SOCKET hSocket, BOOL bBlock)
{
	u_long  IoctlLong = (bBlock) ? 0 : 1;

	if (ioctlsocket(hSocket, FIONBIO, &IoctlLong) == SOCKET_ERROR)
	{
		TE_SetLastError( WSAGetLastError() );
		return (SOCKET_ERROR);
    }

	return (SOCKET_SUCCESS);

}

// 數(shù)據(jù)報(bào)接收函數(shù)
int TE_RecvDataFrom( SOCKET hSocket, struct sockaddr * pFrom, int iFromlen,
					 char *pszBuffer, int iBufferSize, DWORD dwTimeout)
{
	HANDLE hReadEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	if (hReadEvent == NULL)
	{
		TE_SetLastError((int)GetLastError() );
		return (SOCKET_ERROR);
	}

	DWORD		dwRtxBytes = 0,
				dwRtxFlags = 0;
	WSABUF		WSABuff;

	ZeroMemory(&WSABuff,sizeof(WSABUF));
	WSABuff.len = iBufferSize;
	WSABuff.buf = pszBuffer;

	for (;;)
	{
		// 注冊(cè)FD_READ事件
		if( WSAEventSelect(hSocket, (WSAEVENT) hReadEvent, FD_READ) == SOCKET_ERROR)
		{
			CloseHandle(hReadEvent);
			TE_SetLastError(  WSAGetLastError() );
			return (SOCKET_ERROR);
		}
		DWORD dwWaitResult = WSAWaitForMultipleEvents(1, &hReadEvent, TRUE,	dwTimeout, TRUE);

		if( dwWaitResult != WSA_WAIT_EVENT_0 )
		{
			// 注銷事件
			WSAEventSelect(hSocket, (WSAEVENT) hReadEvent, 0);
			CloseHandle(hReadEvent);
			TE_SetLastError( WSAGetLastError());
			return (SOCKET_ERROR);
		}

		////////////////////////////////////////////////////////////// 
		///	注意:即使 dwWaitResult == WSA_WAIT_EVENT0 ,也應(yīng)該 
		///			進(jìn)一步檢查網(wǎng)絡(luò)是否發(fā)生錯(cuò)誤
		///////////////////////////////////////////////////////////////
		WSANETWORKEVENTS NetEvent;
		if(WSAEnumNetworkEvents(hSocket,(WSAEVENT)hReadEvent,&NetEvent) == SOCKET_ERROR)
		{
			// 注銷事件
			WSAEventSelect(hSocket, (WSAEVENT) hReadEvent, 0);
			CloseHandle(hReadEvent);
			TE_SetLastError( WSAGetLastError() );
			return (SOCKET_ERROR);
		}
		if(NetEvent.iErrorCode[FD_READ_BIT] !=0 )	// 發(fā)生錯(cuò)誤
		{
			// 注銷事件
			WSAEventSelect(hSocket, (WSAEVENT) hReadEvent, 0);
			CloseHandle(hReadEvent);
			TE_SetLastError(NetEvent.iErrorCode[FD_READ_BIT]);
			return (SOCKET_ERROR);
		}
		////////////////////////////////////////////////////////////////
		// 注銷事件
		WSAEventSelect(hSocket, (WSAEVENT) hReadEvent, 0);

		int FromLen = iFromlen;
		if ( WSARecvFrom(hSocket, &WSABuff, 1, &dwRtxBytes, &dwRtxFlags,pFrom, &FromLen, NULL, NULL) == SOCKET_SUCCESS )
			break;

		if ( WSAGetLastError() != WSAEWOULDBLOCK)
		{
			CloseHandle(hReadEvent);
			TE_SetLastError( WSAGetLastError() );
			return (SOCKET_ERROR);
		}

		///////////////////////////////////////////////////////////////////////////
		//	睡眠一段時(shí)間
		//////////////////////////////////////////////////////////////////////////
		Sleep(TE_BLOCKED_SNDRCV_SLEEP);
	}
	CloseHandle(hReadEvent);
	return ((int) dwRtxBytes);
}

// 數(shù)據(jù)報(bào)發(fā)送數(shù)據(jù)報(bào)
int TE_SendDataTo(SOCKET hSocket, const struct sockaddr * pTo,int iToLen,
				  char const * pszBuffer, int iBufferSize, DWORD dwTimeout)
{
	HANDLE hWriteEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	if (hWriteEvent == NULL)
	{
		TE_SetLastError( (int)GetLastError() );
		return (SOCKET_ERROR);
	}

	DWORD	dwRtxBytes = 0,
            dwRtxFlags = 0;
	WSABUF	WSABuff;

	ZeroMemory(&WSABuff,sizeof(WSABUF));
	WSABuff.len = iBufferSize;
	WSABuff.buf = (char *) pszBuffer;

	for (;;)
	{
		if (WSASendTo( hSocket, &WSABuff, 1, &dwRtxBytes, dwRtxFlags,pTo, iToLen, NULL, NULL) == SOCKET_SUCCESS)
			break;

		if (WSAGetLastError() != WSAEWOULDBLOCK)
		{
			CloseHandle(hWriteEvent);
			TE_SetLastError(  WSAGetLastError() );
			return (SOCKET_ERROR);
		}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品三级日韩久久| 一本大道久久a久久精品综合| 免费成人美女在线观看.| 蜜桃视频免费观看一区| 国产酒店精品激情| 在线视频国内一区二区| 337p亚洲精品色噜噜| 日韩无一区二区| 国产精品二三区| 水野朝阳av一区二区三区| 国产成人高清视频| 欧美三电影在线| 国产亚洲一本大道中文在线| 亚洲欧美韩国综合色| 美女任你摸久久| 91网站黄www| 欧美刺激午夜性久久久久久久| 中文字幕av一区二区三区| 亚洲高清三级视频| 国产一区二三区| 欧美日韩情趣电影| 国产精品三级av| 六月丁香婷婷久久| 欧美色图在线观看| 国产精品美女久久福利网站| 日韩不卡一区二区| 99久久er热在这里只有精品15| 日韩一卡二卡三卡四卡| 亚洲精品欧美专区| 成人高清在线视频| 精品国产乱码久久久久久闺蜜| 樱桃视频在线观看一区| 豆国产96在线|亚洲| 精品乱人伦小说| 天天色天天操综合| 色哟哟国产精品| 国产精品卡一卡二| 国产乱码精品一区二区三区忘忧草| 欧美日本一区二区| 亚洲欧美日韩电影| 99免费精品视频| 国产欧美一区二区在线| 久久精品国产网站| 欧美一级视频精品观看| 亚洲成人久久影院| 色94色欧美sute亚洲线路一ni| 亚洲精品在线一区二区| 蜜臀精品久久久久久蜜臀| 69久久夜色精品国产69蝌蚪网| 亚洲激情自拍视频| 91一区二区三区在线观看| 国产精品国产a| 99久久伊人精品| 日韩美女视频一区二区| 久久99精品视频| 久久久一区二区| 国内精品国产成人| 欧美国产乱子伦| 成人动漫一区二区在线| 中文字幕中文字幕一区| 成人av午夜影院| 1024成人网| 色综合网色综合| 亚洲va欧美va天堂v国产综合| 色国产精品一区在线观看| 亚洲精品成人天堂一二三| 欧美日韩一级大片网址| 日本aⅴ亚洲精品中文乱码| 在线播放中文一区| 久久国产综合精品| 国产日韩欧美不卡在线| 波多野结衣精品在线| 国产精品欧美一区二区三区| 91久久一区二区| 首页亚洲欧美制服丝腿| 欧美日韩国产免费| 黄一区二区三区| 国产精品视频在线看| 在线亚洲一区二区| 日韩avvvv在线播放| 欧美成人一区二区三区在线观看| 国产成人综合网站| 亚洲综合在线观看视频| 欧美日韩一区二区在线观看| 久久精品国产**网站演员| 日韩视频一区二区三区在线播放 | 9i在线看片成人免费| 亚洲综合无码一区二区| 日韩免费电影一区| 成人av综合一区| 五月激情六月综合| 国产欧美日韩综合精品一区二区| 欧美日韩国产高清一区二区| 99久久久久久| 粉嫩aⅴ一区二区三区四区五区| 日本女优在线视频一区二区| 亚洲永久免费视频| 日韩理论片网站| 国产日韩精品久久久| 精品国产a毛片| 欧美精选一区二区| 在线视频欧美区| 91小视频在线免费看| 成人性生交大片免费看中文| 久久99精品一区二区三区三区| 亚洲福利视频三区| 亚洲自拍欧美精品| 亚洲欧美另类小说视频| 最近日韩中文字幕| 一色屋精品亚洲香蕉网站| 国产亚洲人成网站| 国产亚洲精品aa| 26uuu欧美日本| 日韩精品一区二区三区视频 | 成+人+亚洲+综合天堂| 国产在线一区二区综合免费视频| 日韩影院免费视频| 日本女人一区二区三区| 日本欧美在线观看| 激情亚洲综合在线| 国产精品中文字幕日韩精品| 国模娜娜一区二区三区| 国产综合一区二区| 国产iv一区二区三区| 成人性色生活片| 99在线热播精品免费| 日本丰满少妇一区二区三区| 色视频一区二区| 欧美日韩视频在线观看一区二区三区| 欧美性videosxxxxx| 欧美日韩高清影院| 欧美一级片在线观看| 精品福利av导航| 中文字幕不卡一区| 一区二区三区在线播放| 天堂va蜜桃一区二区三区| 九一久久久久久| 99久久精品国产网站| 91免费视频大全| 欧美剧情电影在线观看完整版免费励志电影 | 中文字幕成人av| 亚洲一区二区偷拍精品| 日韩精品欧美精品| 国产麻豆精品在线观看| av色综合久久天堂av综合| 精品视频123区在线观看| 欧美精品三级在线观看| 国产亚洲午夜高清国产拍精品| 亚洲日本va午夜在线影院| 日韩av一级电影| 国产精品一区二区久久精品爱涩 | 4438成人网| 久久久久国产精品麻豆ai换脸 | 色综合天天综合网天天看片| 欧美老年两性高潮| 日本一区二区三区在线不卡| 亚洲高清免费观看高清完整版在线观看| 日韩国产欧美在线播放| 国产a精品视频| 日韩欧美亚洲国产另类| 成人免费小视频| 久久99精品久久久久久国产越南| 99re热这里只有精品视频| 日韩欧美久久久| 亚洲伊人色欲综合网| 国产91丝袜在线播放九色| 欧美久久高跟鞋激| 中文字幕一区三区| 国产综合色在线| 欧美久久久影院| 亚洲另类在线制服丝袜| 国产精品一级黄| 日韩一卡二卡三卡国产欧美| 亚洲精品成人悠悠色影视| 国产成人在线视频网址| 51久久夜色精品国产麻豆| 伊人婷婷欧美激情| 国产成人综合亚洲网站| 日韩免费高清视频| 日韩精品一二区| 欧美日韩精品是欧美日韩精品| 亚洲日本在线a| 大桥未久av一区二区三区中文| 日韩亚洲欧美综合| 香蕉影视欧美成人| 91污片在线观看| 国产精品久久久久久久久免费相片 | 成人国产视频在线观看| 久久精品欧美一区二区三区不卡 | 国产91综合一区在线观看| 日韩视频一区二区三区| 亚洲成av人片在www色猫咪| 99精品一区二区| 欧美激情资源网| 丰满少妇在线播放bd日韩电影| 欧美成人艳星乳罩| 精品影视av免费| 亚洲精品在线观看网站| 六月婷婷色综合| 精品国产91亚洲一区二区三区婷婷|