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

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

?? te_socket.cpp

?? 類似于flashget的下載軟件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
		//////////////////////////////////////////////////////////////////////////
		//	睡眠一段時(shí)間
		/////////////////////////////////////////////////////////////////////////
		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ā)生錯(cuò)誤
		///////////////////////////////////////////////////////////////
		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ā)生錯(cuò)誤
		{
			// 注銷事件
			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)指針(失敗時(shí)為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		--	是否在解開套接字同時(shí)關(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	 -- 接收超時(shí)(缺省為TE_RECV_TIMEOUT)	
//		返回: 
//				 0	---	成功 (SOCKET_SUCCESS)
//				-1	---	失敗 (SOCKET_ERROR)	
//
////////////////////////////////////////////////////////////////////
int TE_BSocketReadData(PBSD pBSD, DWORD dwTimeout /* = TE_RECV_TIMEOUT */ )
{
	// 計(jì)算緩沖區(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ū)讀取一個(gè)字符
//		參數(shù): 
//				pBSD		 -- BufSocketData結(jié)構(gòu)指針
//				dwTimeOut -- 接收超時(shí)(缺省為TE_RECV_TIMEOUT)	
//		返回: 
//				一個(gè)字符(錯(cuò)誤時(shí)返回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:錯(cuò)誤)
//				dwTimeOut	 -- 接收超時(shí)(缺省為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:錯(cuò)誤)
//				dwTimeOut	-- 接收超時(shí)(缺省為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ā)送超時(shí)(缺省為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	 -- 接收超時(shí)(缺省為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一区二区三区免费野_久草精品视频
九一九一国产精品| 国模一区二区三区白浆| 欧美亚洲高清一区| 一区二区高清免费观看影视大全| 99re热视频这里只精品 | 欧美精品aⅴ在线视频| 一级做a爱片久久| 色屁屁一区二区| 日日骚欧美日韩| 欧美v国产在线一区二区三区| 狠狠色丁香婷婷综合| 国产欧美一区二区三区在线看蜜臀| 春色校园综合激情亚洲| 亚洲视频免费看| 欧美高清www午色夜在线视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 美腿丝袜一区二区三区| 久久久美女毛片| 色婷婷狠狠综合| 日本vs亚洲vs韩国一区三区 | 欧美午夜电影一区| 久久www免费人成看片高清| 国产欧美日韩另类一区| 欧美视频第二页| 国产自产2019最新不卡| 亚洲免费大片在线观看| 欧美不卡一区二区三区| 91尤物视频在线观看| 免费av成人在线| 成人免费一区二区三区在线观看| 欧美日韩精品免费| 东方aⅴ免费观看久久av| 亚洲成av人片在www色猫咪| 久久精品人人做人人综合| 精品婷婷伊人一区三区三| 国产精品一二三四区| 亚洲高清免费一级二级三级| 欧美网站大全在线观看| 久久久91精品国产一区二区精品| 亚洲人成在线播放网站岛国| 久久99精品久久久久久| 欧洲国产伦久久久久久久| 久久综合九色综合久久久精品综合| 国产精品福利电影一区二区三区四区| 午夜精品成人在线视频| 国产99一区视频免费| 欧美蜜桃一区二区三区| 综合网在线视频| 国产真实乱子伦精品视频| 欧美日韩亚洲综合| 国产精品国产三级国产普通话三级 | 国产一区高清在线| 日韩黄色在线观看| 亚洲一级在线观看| 亚洲人成精品久久久久久| 久久久九九九九| 欧美精品一区二| 日韩一级欧美一级| 在线中文字幕一区二区| 国产美女娇喘av呻吟久久| 欧美aaaaaa午夜精品| 一区二区在线观看免费视频播放| 亚洲综合在线第一页| 国产精品毛片无遮挡高清| www久久久久| 日韩欧美卡一卡二| 日韩三级高清在线| 7777精品伊人久久久大香线蕉的| 欧美亚洲综合久久| 欧美亚洲免费在线一区| 在线一区二区观看| 色婷婷综合激情| 91久久一区二区| 欧美视频三区在线播放| 欧美性感一类影片在线播放| 一本一道久久a久久精品| 91麻豆产精品久久久久久 | 在线观看av一区二区| 日本高清免费不卡视频| 在线这里只有精品| 欧美视频在线一区二区三区| 欧美中文字幕久久| 欧美日韩成人一区| 91精品国产欧美一区二区成人| 制服丝袜亚洲网站| 精品国产乱码久久久久久牛牛| 日韩欧美一区二区在线视频| 欧美mv和日韩mv国产网站| 精品国产乱码久久久久久夜甘婷婷| 精品1区2区在线观看| 久久精品一区二区三区不卡牛牛 | 欧美va亚洲va国产综合| 国产精品一区二区在线看| 国产午夜精品久久| 91片在线免费观看| 日韩在线一区二区| 国产日韩精品一区| 久久99国产精品成人| 丁香六月久久综合狠狠色| 91在线精品秘密一区二区| 日韩伦理免费电影| 欧美精品一卡二卡| 国产精品一区不卡| 亚洲一区国产视频| 精品三级在线观看| 国产一区二区三区香蕉| 精品影视av免费| www.亚洲色图| 欧美一级视频精品观看| 欧美极品美女视频| 亚洲午夜影视影院在线观看| 狠狠色丁香九九婷婷综合五月| 成人动漫一区二区| 91精品免费在线| 国产精品网曝门| 天天亚洲美女在线视频| 国产精品一二二区| 538prom精品视频线放| 亚洲高清免费一级二级三级| 香蕉久久夜色精品国产使用方法| 国产婷婷色一区二区三区在线| 欧美一区二区三级| 国产精品丝袜黑色高跟| 午夜精品一区二区三区三上悠亚| 国产成人自拍在线| 欧美精三区欧美精三区| 国产精品美女一区二区三区| 日本成人中文字幕| 91浏览器在线视频| 久久色在线视频| 日韩中文字幕麻豆| 不卡大黄网站免费看| 精品国产a毛片| 亚洲欧美一区二区三区极速播放 | 日韩亚洲欧美高清| 亚洲欧美日韩一区二区三区在线观看| 久久97超碰国产精品超碰| 欧美性大战久久| 国产精品萝li| 国产精品一区2区| 欧美电视剧在线看免费| 综合久久久久久| 国产aⅴ精品一区二区三区色成熟| 国产麻豆91精品| av高清久久久| 日韩中文字幕一区二区三区| 日韩一区精品字幕| 欧美高清视频www夜色资源网| 色婷婷国产精品久久包臀| 不卡影院免费观看| av一本久道久久综合久久鬼色| 国产91清纯白嫩初高中在线观看 | 亚洲一二三区在线观看| 亚洲人成影院在线观看| 亚洲欧洲综合另类在线| 亚洲黄一区二区三区| 亚洲黄色av一区| 中文字幕av一区二区三区免费看| 美美哒免费高清在线观看视频一区二区 | 欧美激情中文字幕一区二区| 精品亚洲成a人在线观看| 欧美一区二区视频在线观看| 水野朝阳av一区二区三区| 欧美三级韩国三级日本一级| 亚洲综合久久久久| 欧美视频在线观看一区| 亚洲图片欧美一区| 欧美精品v国产精品v日韩精品| 视频一区在线播放| 日韩一级片在线观看| 久久国产精品99精品国产| 欧美电影免费观看高清完整版在线观看 | 欧美一区二区三区啪啪| 日韩国产在线观看一区| 欧美一二区视频| 精品综合免费视频观看| 久久精品男人的天堂| gogo大胆日本视频一区| 一区二区三区欧美日| 欧美日韩在线亚洲一区蜜芽| 日日夜夜免费精品视频| 日韩欧美在线1卡| 国产精品1024| 国产精品久久久一本精品| 一本色道久久综合亚洲91| 亚洲成av人片在线| 3d成人动漫网站| 国产在线不卡一区| 国产一区二区毛片| 中文字幕一区二区三区在线观看| 国产自产高清不卡| 亚洲天堂久久久久久久| 欧美日韩在线免费视频| 老司机精品视频线观看86| 久久九九99视频| 91九色最新地址| 免播放器亚洲一区| 欧美国产激情一区二区三区蜜月| 日本韩国欧美一区二区三区| 日本免费新一区视频|