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

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

?? te_socket.cpp

?? 用VC編寫的HTTP下載的win32程序
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
		//////////////////////////////////////////////////////////////////////////
		//	睡眠一段時間
		/////////////////////////////////////////////////////////////////////////
		Sleep(TE_BLOCKED_SNDRCV_SLEEP);

		// 注冊FD_WRITE事件  
		if( WSAEventSelect(hSocket, (WSAEVENT) hWriteEvent, FD_WRITE) == SOCKET_ERROR)
		{
			CloseHandle(hWriteEvent);
			TE_SetLastError( WSAGetLastError() );
			return (SOCKET_ERROR);
		}
		DWORD dwWaitResult = WSAWaitForMultipleEvents(1, &hWriteEvent, TRUE,dwTimeout, TRUE);
		
		if( dwWaitResult != WSA_WAIT_EVENT_0 )
		{
			// 注銷事件
			WSAEventSelect(hSocket, (WSAEVENT) hWriteEvent, 0);
			CloseHandle(hWriteEvent);
			TE_SetLastError(  WSAGetLastError() );
			return (SOCKET_ERROR);
		}

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

	CloseHandle(hWriteEvent);
	return ((int) dwRtxBytes);
}



////////////////////////////////////////////////////////////////////////////////
//
//	BSocket函數(shù)
//
////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//		功能: 綁定套接字
//		參數(shù): 
//				hSocket		-- SOCKET(待綁定套接字)
//				iBufferSize	-- 緩沖區(qū)長度(缺省為TE_SOCKET_BUFFER_SIZE)
//		返回: 
//				結(jié)構(gòu)指針(失敗時為NULL)
//
////////////////////////////////////////////////////////////////////////////////
PBSD TE_BSocketAttach(SOCKET hSocket, int iBufferSize /* = TE_SOCKET_BUFFER_SIZE */ )
{

	if( hSocket == INVALID_SOCKET)
		return NULL;

	// 分配內(nèi)存
	PBSD pBSD = (PBSD) malloc(sizeof(BSD));

	if (pBSD == NULL)
		return NULL;

	char *pszBuffer = (char *) malloc(iBufferSize);

	if (pszBuffer == NULL)
	{
		free(pBSD);
		return NULL;
	}

	// 設(shè)置結(jié)構(gòu)成員
	ZeroMemory(pBSD,sizeof(BSD));
	ZeroMemory(pszBuffer,iBufferSize);

	pBSD->hSocket			= hSocket;
	pBSD->iBufferSize		= iBufferSize;
	pBSD->pszBuffer			= pszBuffer;
	pBSD->iBytesInBuffer	= 0;
	pBSD->iReadIndex		= 0;
	pBSD->iBufferIndex		= 0;

	return pBSD;
}

////////////////////////////////////////////////////////////////////////////
//
//		功能: 解開套接字
//		參數(shù): 
//				pBSD				--	BufSocketData結(jié)構(gòu)指針
//				bCloseSocket		--	是否在解開套接字同時關(guān)閉套接字(缺省為FALSE)
//		返回: 
//				若bCloseSocket為FALSE,返回解開的套接字
//				若bCloseSocket為TRUE ,返回INVALID_SOCKET
//
///////////////////////////////////////////////////////////////////////////
SOCKET TE_BSocketDetach(PBSD pBSD, BOOL bCloseSocket /* = FALSE */ )
{
	SOCKET		 hSocket = pBSD->hSocket;

	// 釋放內(nèi)存
	free(pBSD->pszBuffer);
	free(pBSD);

	// 是否關(guān)閉套接字
	if (bCloseSocket)
	{
		TE_CloseSocket(hSocket);
		return (INVALID_SOCKET);
	}
	return (hSocket);
}


////////////////////////////////////////////////////////////////////
//
//		功能: 從緩沖區(qū)讀取數(shù)據(jù)
//		參數(shù): 
//				pBSD		 -- BufSocketData結(jié)構(gòu)指針
//				dwTimeOut	 -- 接收超時(缺省為TE_RECV_TIMEOUT)	
//		返回: 
//				 0	---	成功 (SOCKET_SUCCESS)
//				-1	---	失敗 (SOCKET_ERROR)	
//
////////////////////////////////////////////////////////////////////
int TE_BSocketReadData(PBSD pBSD, DWORD dwTimeout /* = TE_RECV_TIMEOUT */ )
{
	// 計算緩沖區(qū)空閑區(qū)域
	int	iMaxRead = pBSD->iBufferSize - pBSD->iBytesInBuffer;
	char  *pszBuffer = (char *) malloc(iMaxRead + 1);

	if (pszBuffer == NULL)
		return (SOCKET_ERROR);
	
	// 清空
	ZeroMemory(pszBuffer,iMaxRead+1);

	// 接收數(shù)據(jù)
	int iReadedBytes = TE_RecvData(pBSD->hSocket, pszBuffer, iMaxRead, dwTimeout);

	if (iReadedBytes > 0)
	{
		int iHeadSize = Min(pBSD->iBufferSize - pBSD->iBufferIndex, iReadedBytes);

		if (iHeadSize > 0)
			memcpy(pBSD->pszBuffer + pBSD->iBufferIndex, pszBuffer, iHeadSize);

		pBSD->iBufferIndex += iHeadSize;

		if (pBSD->iBufferIndex == pBSD->iBufferSize)
			pBSD->iBufferIndex = 0;

		int iBackSize = iReadedBytes - iHeadSize;

		if (iBackSize > 0)
			memcpy(pBSD->pszBuffer + pBSD->iBufferIndex, pszBuffer + iHeadSize, iBackSize);

		pBSD->iBufferIndex += iBackSize;
		pBSD->iBytesInBuffer += iReadedBytes;
	}

	free(pszBuffer);
	return (iReadedBytes);
}


////////////////////////////////////////////////////////////////////
//
//		功能: 從緩沖區(qū)讀取一個字符
//		參數(shù): 
//				pBSD		 -- BufSocketData結(jié)構(gòu)指針
//				dwTimeOut -- 接收超時(缺省為TE_RECV_TIMEOUT)	
//		返回: 
//				一個字符(錯誤時返回TE_EOF)
//
////////////////////////////////////////////////////////////////////
int TE_BSocketGetChar(PBSD pBSD, DWORD dwTimeout /* = TE_RECV_TIMEOUT */ )
{
	if ((pBSD->iBytesInBuffer == 0) && (TE_BSocketReadData(pBSD, dwTimeout) <= 0))
		return (TE_EOF);

	int iChar =( (int) pBSD->pszBuffer[pBSD->iReadIndex]) & 0x000000ff;

	pBSD->iReadIndex = INext(pBSD->iReadIndex, pBSD->iBufferSize);

	--pBSD->iBytesInBuffer;

	return (iChar);
}


////////////////////////////////////////////////////////////////////////////
//
//		功能: 從緩沖區(qū)讀取一行(注意,結(jié)尾的回車換行0x0D,0x0A并不包括在其中)
//		參數(shù): 
//				pBSD		 -- BufSocketData結(jié)構(gòu)指針
//				pszBuffer	 -- 接收緩沖區(qū)
//				iBufferSize	 -- 緩沖大小
//				iStatus		 -- 狀態(tài) (0:正常,1:緩沖不夠,-1:錯誤)
//				dwTimeOut	 -- 接收超時(缺省為TE_RECV_TIMEOUT)	
//		返回: 
//				 0	---	成功 (SOCKET_SUCCESS)
//				-1	---	失敗 (SOCKET_ERROR)	
//
////////////////////////////////////////////////////////////////////////////
int TE_BSocketGetString(PBSD pBSD, char *pszBuffer, int iBufferSize, int* iStatus, DWORD dwTimeout /* = TE_RECV_TIMEOUT */ )
{
	
	*iStatus = 1;		//緩沖長度不足

	int ii,iChar;
	for (ii = 0; ii < (iBufferSize - 1);)
	{
		iChar = TE_BSocketGetChar(pBSD, dwTimeout);
		if (iChar == TE_EOF)
		{
			*iStatus = (-1) ;
			return SOCKET_ERROR;
		}

		if (iChar == 0x0D)	// 回車符號
		{
			iChar = TE_BSocketGetChar(pBSD, dwTimeout);
			if (iChar == TE_EOF)
			{
				*iStatus = (-1);
				return (SOCKET_ERROR);
			}

			if (iChar == 0x0A)	// 換行
			{
				*iStatus = 0;	//正常情況
				break;
			}
			else
				pszBuffer[ii++] = 0x0D;
		}
		else
			pszBuffer[ii++] = (char) iChar;
	}
	pszBuffer[ii] = '\0';

	return (SOCKET_SUCCESS);
}

/////////////////////////////////////////////////////////////////////////////////////////
//
//		功能: 從緩沖區(qū)讀取一行(包括單換行0x0A)(注意,結(jié)尾的回車換行不包括在其中)
//		參數(shù): 
//				pBSD		-- BufSocketData結(jié)構(gòu)指針
//				pszBuffer	 -- 接收緩沖區(qū)
//				iBufferSize	 -- 緩沖大小
//				iStatus		-- 狀態(tài) (0:正常,1:緩沖不夠,-1:錯誤)
//				dwTimeOut	-- 接收超時(缺省為TE_RECV_TIMEOUT)	
//		返回: 
//				 0	---	成功 (SOCKET_SUCCESS)
//				-1	---	失敗 (SOCKET_ERROR)	
//
//////////////////////////////////////////////////////////////////////////////////////////
int TE_BSocketGetStringEx(PBSD pBSD, char *pszBuffer, int iBufferSize, int* iStatus, DWORD dwTimeout /* = TE_RECV_TIMEOUT */ )
{
	
	*iStatus = 1;		//緩沖長度不足

	int ii,iChar;
	int LastChar = TE_EOF;
	for (ii = 0; ii < (iBufferSize - 1);)
	{
		iChar = TE_BSocketGetChar(pBSD, dwTimeout);

		if (iChar == TE_EOF)
		{
			*iStatus = (-1) ;
			return SOCKET_ERROR;
		}

		if (iChar == 0x0A)	// 換行符號
		{
			*iStatus = 0;	//正常情況
			if (LastChar == 0x0D)
				ii-- ;	
			break;
		}
		else
			pszBuffer[ii++] = (char) iChar;

		LastChar = iChar;
			
	}
	pszBuffer[ii] = '\0';

	return (SOCKET_SUCCESS);
}



////////////////////////////////////////////////////////////////////
//
//		功能: 發(fā)送一行 : 自動在最后加上“回車換行符(0x0D,0x0A)”
//		參數(shù): 
//				pBSD		-- BufSocketData結(jié)構(gòu)指針
//				pszBuffer	-- 待發(fā)送字符串
//				dwTimeOut	-- 發(fā)送超時(缺省為TE_SEND_TIMEOUT)	
//		返回: 
//				 0	---	成功 (SOCKET_SUCCESS)
//				-1	---	失敗 (SOCKET_ERROR)	
//
////////////////////////////////////////////////////////////////////
int TE_BSocketSendString(PBSD pBSD, const char *pszBuffer, DWORD dwTimeout /* = TE_SEND_TIMEOUT */ )
{

	char *pszSendBuffer = (char *) malloc(strlen(pszBuffer) + 3);

	if (pszSendBuffer == NULL)
		return (SOCKET_ERROR);

	ZeroMemory( pszSendBuffer,strlen(pszBuffer) + 3);
	sprintf(pszSendBuffer, "%s\r\n", pszBuffer);

	int iSendLength = strlen(pszSendBuffer);
	if (TE_Send(pBSD->hSocket, pszSendBuffer, iSendLength, dwTimeout) != iSendLength)
	{
        free(pszSendBuffer);
		return (SOCKET_ERROR);
    }
	free(pszSendBuffer);
	return (iSendLength);
}


////////////////////////////////////////////////////////////////////
//
//		功能: 獲取套接字
//		參數(shù): 
//				pBSD -- BufSocketData結(jié)構(gòu)指針
//		返回: 
//				與此結(jié)構(gòu)綁定在一起的SOCKET	
//
////////////////////////////////////////////////////////////////////
SOCKET TE_BSocketGetAttachedSocket(PBSD pBSD)
{
	return (pBSD->hSocket);
}

////////////////////////////////////////////////////////////////////
//
//		功能: 從緩沖區(qū)讀取一定數(shù)量的數(shù)據(jù)
//		參數(shù): 
//				pBSD		 -- BufSocketData結(jié)構(gòu)指針
//				pszBuffer	 -- 接收緩沖區(qū)
//				iBufferSize	 -- 緩沖大小
//				dwTimeOut	 -- 接收超時(缺省為TE_RECV_TIMEOUT)	
//		返回: 
//				讀的數(shù)據(jù)的字節(jié)數(shù)
////////////////////////////////////////////////////////////////////
int TE_BSocketGetData(PBSD pBSD, char *pszBuffer, int iBufferSize,DWORD dwTimeout /*= TE_RECV_TIMEOUT*/)
{
	int iReadBytes	 = 0;
	int iHeadSize,iBackSize;

	if ((pBSD->iBytesInBuffer == 0) && (TE_BSocketReadData(pBSD, dwTimeout) <= 0))
		return 0; 

	if( pBSD->iBytesInBuffer < iBufferSize ) // 數(shù)據(jù)不夠多
	{
		iHeadSize = Min( pBSD->iBufferSize - pBSD->iReadIndex ,pBSD->iBytesInBuffer );
		memcpy(pszBuffer+iReadBytes,pBSD->pszBuffer+pBSD->iReadIndex,iHeadSize);
			
		pBSD->iReadIndex += iHeadSize;
		if( pBSD->iReadIndex == pBSD->iBufferSize )
			pBSD->iReadIndex = 0;

		iReadBytes += iHeadSize;
		iBackSize = pBSD->iBytesInBuffer - iHeadSize;
			
		if( iBackSize > 0)
			memcpy(pszBuffer+iReadBytes,pBSD->pszBuffer+pBSD->iReadIndex,iBackSize);

		iReadBytes			 += iBackSize;
		pBSD->iReadIndex	 += iBackSize;
		pBSD->iBytesInBuffer = 0; // 數(shù)據(jù)全部讀完
	}
	else // 這次的數(shù)據(jù)足夠多了
	{
		iHeadSize = Min( pBSD->iBufferSize - pBSD->iReadIndex,iBufferSize - iReadBytes );
		memcpy(pszBuffer+iReadBytes,pBSD->pszBuffer+pBSD->iReadIndex,iHeadSize);
			
		pBSD->iReadIndex += iHeadSize;
		if( pBSD->iReadIndex == pBSD->iBufferSize )
			pBSD->iReadIndex = 0;

		iReadBytes += iHeadSize;
		iBackSize = iBufferSize - iReadBytes;

		if( iBackSize > 0)
			memcpy(pszBuffer+iReadBytes,pBSD->pszBuffer+pBSD->iReadIndex,iBackSize);

		iReadBytes			 += iBackSize;
		pBSD->iReadIndex	 += iBackSize;
		pBSD->iBytesInBuffer -= (iHeadSize+iBackSize);
	}
	return iReadBytes;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成年人网站在线观看| 蜜臀久久99精品久久久久久9| 欧美视频一区二区在线观看| 久久 天天综合| 亚洲伦理在线精品| 久久只精品国产| 欧美网站一区二区| 成人免费视频国产在线观看| 亚洲成av人片在线观看无码| 国产精品亲子乱子伦xxxx裸| 欧美一级一区二区| 色94色欧美sute亚洲13| 国产高清久久久| 喷水一区二区三区| 亚洲欧洲成人精品av97| 国产色综合一区| 91麻豆精品国产91久久久使用方法 | 国产精品一区二区久久精品爱涩| 亚洲午夜久久久久| 国产精品人妖ts系列视频| 精品少妇一区二区三区| 8x福利精品第一导航| 欧日韩精品视频| 99久久精品久久久久久清纯| 国产在线视视频有精品| 蜜桃在线一区二区三区| 亚洲v日本v欧美v久久精品| 亚洲免费观看高清完整版在线观看熊| 国产视频一区在线观看| 久久久五月婷婷| 日韩精品一区二区在线观看| 91精品欧美综合在线观看最新| 欧洲国内综合视频| 色妞www精品视频| av电影一区二区| 99久久综合色| av不卡在线播放| 99视频精品在线| av电影在线观看不卡| 成人开心网精品视频| 成人动漫av在线| 成人夜色视频网站在线观看| 国产黄色成人av| 国产成人8x视频一区二区| 风间由美一区二区av101| 国产一二三精品| 国产成人超碰人人澡人人澡| 国产伦精品一区二区三区免费迷| 久久超碰97中文字幕| 九九精品视频在线看| 国产麻豆精品视频| 国产成人8x视频一区二区| 成人午夜在线视频| 99久久婷婷国产| 欧美专区在线观看一区| 欧美三级欧美一级| 91精品视频网| 久久久久一区二区三区四区| 国产精品美女久久久久高潮| 中文字幕视频一区| 一区二区成人在线| 日韩av网站在线观看| 国产综合久久久久影院| 成人黄色a**站在线观看| 91美女精品福利| 欧美日韩视频一区二区| 日韩一区二区免费在线电影| 亚洲精品一区二区三区福利 | 亚洲男女一区二区三区| 亚洲一区二区三区国产| 免费高清在线一区| 成人一级视频在线观看| 欧美在线观看视频一区二区| 日韩午夜三级在线| 欧美激情一区二区三区蜜桃视频 | 一区2区3区在线看| 无吗不卡中文字幕| 国产一区日韩二区欧美三区| jlzzjlzz亚洲日本少妇| 欧美精品xxxxbbbb| 国产欧美日韩麻豆91| 亚洲一级在线观看| 精品亚洲成a人在线观看| 99精品国产91久久久久久| 7777精品伊人久久久大香线蕉完整版| 久久久精品一品道一区| 亚洲激情网站免费观看| 国产一区二区免费看| 在线精品亚洲一区二区不卡| 久久欧美中文字幕| 亚洲一二三四区| 国产福利不卡视频| 欧美日韩高清在线播放| 中文字幕第一区综合| 污片在线观看一区二区| 成人激情黄色小说| 日韩一级在线观看| 亚洲精品欧美激情| 国产精品一区一区三区| 欧美日韩在线播| 国产精品久久久久7777按摩| 日本免费在线视频不卡一不卡二| www.99精品| 精品国产麻豆免费人成网站| 亚洲午夜一二三区视频| 懂色av噜噜一区二区三区av| 9191国产精品| 一区二区欧美视频| 福利一区二区在线观看| 91精品国产高清一区二区三区蜜臀| 中文字幕成人在线观看| 韩国女主播成人在线观看| 91 com成人网| 亚洲一二三四久久| 色吊一区二区三区| 中文字幕一区二区三区精华液| 黄色小说综合网站| 69久久夜色精品国产69蝌蚪网| 亚洲人成精品久久久久| 成人午夜又粗又硬又大| 亚洲精品在线观| 久久精品国产77777蜜臀| 欧美高清精品3d| 五月婷婷欧美视频| 在线观看视频欧美| 亚洲人一二三区| 不卡的av在线| 欧美国产丝袜视频| 大尺度一区二区| 欧美国产日韩一二三区| 国产精品一区二区三区乱码| 精品国产制服丝袜高跟| 久久精品国产免费| 精品日韩99亚洲| 六月丁香婷婷色狠狠久久| 日韩女优毛片在线| 精品在线视频一区| 久久这里只精品最新地址| 激情欧美一区二区| 久久精品无码一区二区三区| 国产精品一卡二| 久久精品欧美一区二区三区麻豆| 国产一区免费电影| 国产欧美一区二区精品仙草咪 | www.欧美.com| ...xxx性欧美| 在线观看成人小视频| 亚洲午夜av在线| 欧美精品免费视频| 精品中文字幕一区二区小辣椒| 精品国产123| 国产sm精品调教视频网站| 国产精品色婷婷久久58| 91视频xxxx| 亚洲chinese男男1069| 91精品国产综合久久久久久| 麻豆91精品91久久久的内涵| 欧美精品一区二区久久婷婷| 国产精品99久久久久久久vr| 国产精品麻豆99久久久久久| 91麻豆福利精品推荐| 亚州成人在线电影| 精品国产麻豆免费人成网站| 成人午夜在线免费| 亚洲国产精品久久不卡毛片 | 久久久www成人免费无遮挡大片| 国产精品亚洲第一| 亚洲三级免费观看| 欧美一区二区女人| 国产精品 欧美精品| 中文字幕综合网| 欧美一三区三区四区免费在线看 | 午夜精品视频在线观看| 欧美一区二区视频在线观看| 国产一区二区视频在线播放| 成人欧美一区二区三区小说| 欧美日本在线观看| 国产精品一二三四区| 亚洲免费观看高清完整版在线 | 久久av中文字幕片| 国产精品超碰97尤物18| 91精品国产综合久久精品性色 | 欧美久久久久久久久久| 国产精品白丝jk黑袜喷水| 亚洲精品高清在线| 精品国内片67194| 91高清视频免费看| 国产一区二区三区高清播放| 亚洲美女视频在线观看| 日韩视频免费观看高清完整版在线观看 | 久久夜色精品国产欧美乱极品| 91在线码无精品| 久久99最新地址| 亚洲欧美视频一区| 久久久噜噜噜久噜久久综合| 91黄视频在线观看| 国产高清精品网站| 日本午夜精品视频在线观看| 亚洲精品美腿丝袜| 国产亚洲欧美色|