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

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

?? te_socket.cpp

?? 類似于flashget的下載軟件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
	}

	// 注冊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 ,也應該 
			///			進一步檢查網絡是否發生錯誤
			///////////////////////////////////////////////////////////////
			WSANETWORKEVENTS NetEvent;
			if(WSAEnumNetworkEvents(hSocket,(WSAEVENT)hConnectEvent,&NetEvent) == SOCKET_ERROR)
			{
				TE_SetLastError( WSAGetLastError() );
				iConnectResult = SOCKET_ERROR;
			}
			else if(NetEvent.iErrorCode[FD_CONNECT_BIT] !=0 )	// 發生錯誤
			{
				TE_SetLastError( NetEvent.iErrorCode[FD_CONNECT_BIT] );
				iConnectResult = SOCKET_ERROR;
			}
			else
				iConnectResult = SOCKET_SUCCESS;
			////////////////////////////////////////////////////////////////
		}
	}

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


///////////////////////////////////////////////////////////
//
//	引入該函數的目的是為了避免NT下對域名解析的CACHE造成的問題
//
///////////////////////////////////////////////////////////
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;
}

// 建立連接(擴展函數)
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));
}


// 監聽套接字
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);
	}

	// 注冊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 ,也應該 
			///			進一步檢查網絡是否發生錯誤
			///////////////////////////////////////////////////////////////
			WSANETWORKEVENTS NetEvent;
			if(WSAEnumNetworkEvents(hSocket,hAcceptEvent,&NetEvent) == SOCKET_ERROR)
				TE_SetLastError( WSAGetLastError() );
			else if(NetEvent.iErrorCode[FD_ACCEPT_BIT] !=0 )	// 發生錯誤
				TE_SetLastError( NetEvent.iErrorCode[FD_ACCEPT_BIT] );
			else
				hSocketAccept = WSAAccept(hSocket, pSocketAddress, iNameLen, NULL, 0);
		}
		else
			TE_SetLastError( WSAGetLastError() );
	}
	
	// 注銷網絡事件
	WSAEventSelect(hSocket, (WSAEVENT) hAcceptEvent, 0);
	CloseHandle(hAcceptEvent);

	if (hSocketAccept != INVALID_SOCKET)
	{
		// 設置套接字的屬性為地址可重用并且為非阻塞的
		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;

	// 注冊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 ,也應該 
			///			進一步檢查網絡是否發生錯誤
			///////////////////////////////////////////////////////////////
			WSANETWORKEVENTS NetEvent;
			if(WSAEnumNetworkEvents(hSocket,hAcceptEvent,&NetEvent) == SOCKET_ERROR)
				TE_SetLastError( WSAGetLastError() );
			else if(NetEvent.iErrorCode[FD_ACCEPT_BIT] !=0 )	// 發生錯誤
				TE_SetLastError( NetEvent.iErrorCode[FD_ACCEPT_BIT] );
			else
				hSocketAccept = WSAAccept(hSocket, pSockName, iNameLen, NULL, 0);
		}
		else
			TE_SetLastError( WSAGetLastError() );
	}
	
	// 注銷網絡事件
	WSAEventSelect(hSocket, (WSAEVENT) hAcceptEvent, 0);
	CloseHandle(hAcceptEvent);

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

}

// 設置套接字是否為阻塞的
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);

}

// 數據報接收函數
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 (;;)
	{
		// 注冊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 ,也應該 
		///			進一步檢查網絡是否發生錯誤
		///////////////////////////////////////////////////////////////
		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 )	// 發生錯誤
		{
			// 注銷事件
			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);
		}

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

// 數據報發送數據報
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);
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产欧美综合| 青青草97国产精品免费观看 | 91欧美激情一区二区三区成人| 欧亚洲嫩模精品一区三区| 久久久久久久久久久久久女国产乱| 亚洲欧美另类综合偷拍| 国产风韵犹存在线视精品| 56国语精品自产拍在线观看| 中文字幕制服丝袜成人av| 国内精品免费**视频| 欧美日韩你懂的| 亚洲嫩草精品久久| 国产大陆亚洲精品国产| 精品久久久久久久一区二区蜜臀| 亚洲国产精品久久人人爱蜜臀| heyzo一本久久综合| 国产亚洲欧美色| 国产一区二区精品在线观看| 日韩精品一区二区在线观看| 日韩av中文字幕一区二区| 欧美色欧美亚洲另类二区| 亚洲人妖av一区二区| 成人黄色在线视频| 久久精品一区二区三区四区| 久久99精品国产麻豆婷婷| 欧美一区二区视频在线观看2022| 亚洲一区二三区| 欧美少妇性性性| 亚洲图片一区二区| 欧美性色黄大片| 亚洲国产精品一区二区尤物区| 91免费看视频| 亚洲一线二线三线久久久| 色狠狠色狠狠综合| 亚洲综合一区二区| 欧美亚洲一区二区在线| 亚洲一区国产视频| 欧美老女人第四色| 奇米777欧美一区二区| 日韩你懂的在线观看| 国产一区二区视频在线| 国产精品私人自拍| 色94色欧美sute亚洲线路一ni| 亚洲欧美国产毛片在线| 欧美日韩一本到| 日日欢夜夜爽一区| 精品国产乱码久久久久久蜜臀| 九色|91porny| 亚洲欧洲精品成人久久奇米网| 91在线观看成人| 爽好久久久欧美精品| 欧美成人激情免费网| 国产成人高清在线| 一区二区三区中文在线| 69成人精品免费视频| 激情五月激情综合网| 欧美国产禁国产网站cc| 91国偷自产一区二区三区成为亚洲经典| 一个色妞综合视频在线观看| 在线电影院国产精品| 国产乱码精品一区二区三区av | 成人福利电影精品一区二区在线观看| 国产精品另类一区| 欧美日本精品一区二区三区| 国产综合成人久久大片91| 国产精品国产三级国产专播品爱网| 色88888久久久久久影院按摩| 午夜精品在线看| 久久久www成人免费毛片麻豆| 一本高清dvd不卡在线观看| 日本午夜一本久久久综合| 国产精品无人区| 欧美一区二区网站| 色综合久久久久综合体| 九九精品一区二区| 亚洲综合一区二区| 欧美国产精品一区二区三区| 欧美军同video69gay| 成人性生交大合| 日本欧美一区二区三区乱码| 国产精品二三区| 精品免费国产一区二区三区四区| 91蜜桃传媒精品久久久一区二区| 黑人巨大精品欧美黑白配亚洲| 夜夜嗨av一区二区三区四季av| 久久久久久久精| 欧美一区二区三区色| 91九色最新地址| 成人黄色777网| 韩国视频一区二区| 日韩专区欧美专区| 亚洲欧美激情在线| 中文字幕第一区二区| 日韩欧美亚洲一区二区| 欧美二区三区91| 91黄色激情网站| 色噜噜狠狠色综合中国| 成人成人成人在线视频| 国产高清精品久久久久| 久久99国产精品免费| 人人狠狠综合久久亚洲| 亚洲国产一区二区视频| 中文字幕一区二区三区色视频| 国产日产欧美精品一区二区三区| 日韩免费看的电影| 日韩精品一区二区三区在线观看 | 在线亚洲一区观看| youjizz久久| 成人三级在线视频| av网站免费线看精品| 成人午夜av影视| 成人aa视频在线观看| 成熟亚洲日本毛茸茸凸凹| 国产福利一区二区三区视频在线 | 奇米888四色在线精品| 男人操女人的视频在线观看欧美| 日韩精品欧美成人高清一区二区| 一区二区三区中文在线观看| 亚洲永久精品国产| 视频一区在线视频| 六月丁香综合在线视频| 极品美女销魂一区二区三区| 国产美女视频一区| av电影一区二区| 在线国产电影不卡| 制服视频三区第一页精品| 日韩免费一区二区三区在线播放| 欧美精品一区二区精品网| 日本一二三四高清不卡| 一区在线观看免费| 亚洲大片一区二区三区| 午夜精品国产更新| 韩国精品一区二区| 成人免费黄色大片| 日本黄色一区二区| 欧美剧在线免费观看网站 | 日韩视频在线一区二区| 精品毛片乱码1区2区3区 | 9人人澡人人爽人人精品| 一本久道中文字幕精品亚洲嫩| 欧美日韩亚洲综合在线 | 91精品国产综合久久久久久久久久| 欧美一区二区三区视频在线 | 欧美α欧美αv大片| 日本一区二区三区在线不卡| 亚洲美腿欧美偷拍| 秋霞午夜av一区二区三区| 国产九色精品成人porny| 一本大道综合伊人精品热热| 欧美久久一二区| 国产精品沙发午睡系列990531| 亚洲一区二区三区四区中文字幕| 久久99国产精品免费网站| 99麻豆久久久国产精品免费优播| 欧美日本一区二区三区四区| 国产女主播视频一区二区| 亚洲影院理伦片| 丰满亚洲少妇av| 欧美不卡一区二区三区四区| 国产精品午夜免费| 麻豆视频一区二区| 在线免费不卡电影| 久久久久久久久久久久久夜| 亚洲国产精品视频| 99re这里只有精品6| 精品国产污网站| 午夜视频一区二区三区| 成人精品视频一区二区三区尤物| 欧美一区二区大片| 一区av在线播放| 99久久99久久精品国产片果冻| 精品国产乱码久久久久久闺蜜| 亚洲午夜精品一区二区三区他趣| 高清不卡一区二区在线| 精品国精品自拍自在线| 亚洲国产成人高清精品| 97久久人人超碰| 国产精品国产三级国产普通话蜜臀 | 欧美日韩一级片在线观看| 国产欧美日韩另类一区| 久久精品72免费观看| 精品污污网站免费看| 亚洲美女电影在线| 成人性生交大片免费看在线播放| 欧美大胆人体bbbb| 日本欧美一区二区三区乱码| 欧美中文字幕一二三区视频| 亚洲免费观看在线视频| 成人动漫在线一区| 国产日韩欧美精品电影三级在线| 久久精品国产澳门| 日韩你懂的在线播放| 日本va欧美va欧美va精品| 91麻豆精品国产91久久久更新时间 | 99精品久久只有精品| 国产精品国产三级国产aⅴ入口| 久久99精品久久久久久| 精品久久免费看| 韩国女主播成人在线观看| 欧美一区二区三区视频免费播放|