青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
純c語言實現的IOCP服務器,網上找了很多都是c++的 [轉帖 2008.10.15 22:48:28] ??
我頂 字號:

轉自于:http://hi.baidu.com/netpet/blog/item/bb5ebdb7fd4650f030add1a1.html

代碼如下,注釋已經全部改成中文

#include?? <winsock2.h>??
//#include?? <windows.h>??
#include?? <stdio.h>??

#define?? PORT?? 5150??
#define?? DATA_BUFSIZE?? 8192??
???
typedef?? struct??
{??
??????? OVERLAPPED?? Overlapped;??
??????? WSABUF?? DataBuf;??
??????? CHAR?? Buffer[DATA_BUFSIZE];??
??????? DWORD?? BytesSEND;??
??????? DWORD?? BytesRECV;??
}?? PER_IO_OPERATION_DATA,?? *?? LPPER_IO_OPERATION_DATA;??
???
???
typedef?? struct????
{??
??????? SOCKET?? Socket;??
}?? PER_HANDLE_DATA,?? *?? LPPER_HANDLE_DATA;??
???
???
DWORD?? WINAPI?? ServerWorkerThread(LPVOID?? CompletionPortID);??
???
int main(void)??
{??
??????? SOCKADDR_IN?? InternetAddr;??
??????? SOCKET?? Listen;??
??????? SOCKET?? Accept;??
??????? HANDLE?? CompletionPort;??
??????? SYSTEM_INFO?? SystemInfo;??
??????? LPPER_HANDLE_DATA?? PerHandleData;??
??????? LPPER_IO_OPERATION_DATA?? PerIoData;??
??????? int?? i;??
??????? DWORD?? RecvBytes;??
??????? DWORD?? Flags;??
??????? DWORD?? ThreadID;??
??????? WSADATA?? wsaData;??
??????? DWORD?? Ret;??
???
??????? if?? ((Ret?? =?? WSAStartup(0x0202,?? &wsaData))?? !=?? 0)??
??????? {??
????????????? printf("WSAStartup失敗了,錯誤信息如下:?? %d\n",?? Ret);??
????????????? return;??
??????? }??
???
??????? // 設置一個I/O完成端口.??
???
??????? if?? ((CompletionPort?? =?? CreateIoCompletionPort(INVALID_HANDLE_VALUE,?? NULL,?? 0,?? 0))?? ==?? NULL)??
??????? {??
????????????? printf(?? "CreateIoCompletionPort 失敗了,錯誤信息如下:?? %d\n",?? GetLastError());??
????????????? return;??
??????? }??
???
??????? // 測試系統中有多少cpu處理器
???
??????? GetSystemInfo(&SystemInfo);??
???
??????? //?? 基于系統可用的處理器創建工作線程,為每個處理器創建連個線程??
???
??????? for(i?? =?? 0;?? i?? <?? SystemInfo.dwNumberOfProcessors?? *?? 2;?? i++)??
??????? {??
????????????? HANDLE?? ThreadHandle;??
???
????????????? // 創建一個服務端線程并且傳遞一個完成端口給這個線程.??
???
????????????? if?? ((ThreadHandle?? =?? CreateThread(NULL,?? 0,?? ServerWorkerThread,?? CompletionPort,??
??????????????????? 0,?? &ThreadID))?? ==?? NULL)??
????????????? {??
??????????????????? printf("CreateThread()發生了如下錯誤: %d\n",?? GetLastError());??
??????????????????? return;??
????????????? }??
????????????? else
????????????? {printf("創建了一個完成端口.\n");
????????????? }
????????????? //?? 關閉 thread句柄
????????????? CloseHandle(ThreadHandle);??
??????? }??
???
??????? //?? 創建一個監聽套接字
???
??????? if?? ((Listen?? =WSASocket(AF_INET,?? SOCK_STREAM,?? 0,?? NULL,0,WSA_FLAG_OVERLAPPED))?? ==?? INVALID_SOCKET)??
??????? {??
????????????? printf("WSASocket() 發生了如下錯誤: %d\n",?? WSAGetLastError());??
????????????? return;??
??????? }
??????? else????
??????? {printf("創建監聽套接字成功\n");}
??????? InternetAddr.sin_family?? =?? AF_INET;??
??????? InternetAddr.sin_addr.s_addr?? =?? htonl(INADDR_ANY);??
??????? InternetAddr.sin_port?? =?? htons(PORT);??
???
??????? if?? (bind(Listen,?? (PSOCKADDR)?? &InternetAddr,?? sizeof(InternetAddr))?? ==?? SOCKET_ERROR)??
??????? {??
????????????? printf("bind()端口或IP時發生了如下錯誤: %d\n",?? WSAGetLastError());??
????????????? return;??
??????? }??
??????? else
??????? {printf("綁定端口%d成功\n",PORT);}
??????? // 準備socket 用來監聽??
???
??????? if?? (listen(Listen,?? 5)?? ==?? SOCKET_ERROR)??
??????? {??
????????????? printf("listen() 發生了如下錯誤?? %d\n",?? WSAGetLastError());??
????????????? return;??
??????? }??
???????? else
??????? {printf("預處理成功,開始在端口 %d 處監聽...\n",PORT);}
??????? //接受連接并且交給完成端口處理
???
??????? while(TRUE)??
??????? {??
????????????? if?? ((Accept?? =?? WSAAccept(Listen,?? NULL,?? NULL,?? NULL,?? 0))?? ==?? SOCKET_ERROR)??
????????????? {??
??????????????????? printf("WSAAccept()?? 發生了如下錯誤:?? %d\n",?? WSAGetLastError());??
??????????????????? return;??
????????????? }??
???
????????????? // 創建一個套接字信息結構體去聯系起來socket??
????????????? if?? ((PerHandleData?? =?? (LPPER_HANDLE_DATA)?? GlobalAlloc(GPTR,????
??????????????????? sizeof(PER_HANDLE_DATA)))?? ==?? NULL)??
????????????? {??
??????????????????? printf("GlobalAlloc()?? 發生了如下錯誤:?? %d\n",?? GetLastError());??
??????????????????? return;??
????????????? }??
???
????????????? // 將接受到的套接字與原始的完成端口聯系起來.??
???
????????????? printf("號碼為?? %d?? 的socket連接上了\n",?? Accept);??
????????????? PerHandleData->Socket?? =?? Accept;??
???
????????????? if?? (CreateIoCompletionPort((HANDLE)?? Accept,?? CompletionPort,?? (DWORD)?? PerHandleData,??
??????????????????? 0)?? ==?? NULL)??
????????????? {??
??????????????????? printf("CreateIoCompletionPort?? 發生了如下錯誤:?? %d\n",?? GetLastError());??
??????????????????? return;??
????????????? }??
???
????????????? //?? 創建每一個I/O 套接字信息結構體去和下面被調用的 to?? associate?? with?? the????
????????????? //?? WSARecv 連接.??
???
????????????? if?? ((PerIoData?? =?? (LPPER_IO_OPERATION_DATA)?? GlobalAlloc(GPTR,???????????????????? sizeof(PER_IO_OPERATION_DATA)))?? ==?? NULL)??
????????????? {??
??????????????????? printf("GlobalAlloc() 發生了如下錯誤: %d\n",?? GetLastError());??
??????????????????? return;??
????????????? }??
????????????? else{printf("接收了一個連接\n");}
????????????? ZeroMemory(&(PerIoData->Overlapped),?? sizeof(OVERLAPPED));??
????????????? PerIoData->BytesSEND?? =?? 0;??
????????????? PerIoData->BytesRECV?? =?? 0;??
????????????? PerIoData->DataBuf.len?? =?? DATA_BUFSIZE;??
????????????? PerIoData->DataBuf.buf?? =?? PerIoData->Buffer;??
???
????????????? Flags?? =?? 0;??
????????????? if?? (WSARecv(Accept,?? &(PerIoData->DataBuf),?? 1,?? &RecvBytes,?? &Flags,??
??????????????????? &(PerIoData->Overlapped),?? NULL)?? ==?? SOCKET_ERROR)??
????????????? {??
??????????????????? if?? (WSAGetLastError()?? !=?? ERROR_IO_PENDING)??
??????????????????? {??
????????????????????????? printf("WSARecv() 發生了如下錯誤: %d\n",?? WSAGetLastError());??
????????????????????????? return;??
??????????????????? }??
????????????? }??
??????? }??
}??
???
DWORD?? WINAPI?? ServerWorkerThread(LPVOID?? CompletionPortID)??
{??
??????? HANDLE?? CompletionPort?? =?? (HANDLE)?? CompletionPortID;??
??????? DWORD?? BytesTransferred;??
??????? LPOVERLAPPED?? Overlapped;??
??????? LPPER_HANDLE_DATA?? PerHandleData;??
??????? LPPER_IO_OPERATION_DATA?? PerIoData;??
??????? DWORD?? SendBytes,?? RecvBytes;??
??????? DWORD?? Flags;??
?????????
??????? while(TRUE)??
??????? {??
???
????????????? if?? (GetQueuedCompletionStatus(CompletionPort,?? &BytesTransferred,??
??????????????????? (LPDWORD)&PerHandleData,?? (LPOVERLAPPED?? *)?? &PerIoData,?? INFINITE)?? ==?? 0)??
????????????? {??
??????????????????? printf("GetQueuedCompletionStatus?? 發生了如下錯誤: %d\n",?? GetLastError());??
??????????????????? return?? 0;??
????????????? }??
???
????????????? //首先檢查一下去套接字看是否在上發生了錯誤并且如果發生了錯誤就關閉套接
????????????? //字并且清除與套接字連接的 SOCKET_INFORMATION結構信息體
????????????? if?? (BytesTransferred?? ==?? 0)??
????????????? {??
??????????????????? printf("正在關閉socket?? %d\n",?? PerHandleData->Socket);??
???
??????????????????? if?? (closesocket(PerHandleData->Socket)?? ==?? SOCKET_ERROR)??
??????????????????? {??
????????????????????????? printf("closesocket()?? 發生了如下錯誤: %d\n",?? WSAGetLastError());??
????????????????????????? return?? 0;??
??????????????????? }??
???
??????????????????? GlobalFree(PerHandleData);??
??????????????????? GlobalFree(PerIoData);??
??????????????????? continue;??
????????????? }??
??? //檢查如果 BytesRECV字段等于0,這就意味著一個 WSARecv調用剛剛完成了所以從完成的WSARecv()調用中
??? //用BytesTransferred值更新 BytesRECV字段
????????????? if?? (PerIoData->BytesRECV?? ==?? 0)??
????????????? {??
??????????????????? PerIoData->BytesRECV?? =?? BytesTransferred;??
??????????????????? PerIoData->BytesSEND?? =?? 0;??
????????????? }??
????????????? else??
????????????? {??
??????????????????? PerIoData->BytesSEND?? +=?? BytesTransferred;??
????????????? }??
???
????????????? if?? (PerIoData->BytesRECV?? >?? PerIoData->BytesSEND)??
????????????? {??
??? //發布另外一個 WSASend()請求
??? //既然WSASend()不是 gauranteed去發送所有字節的請求
??? //繼續調用 WSASend()發送直到所有收到的字節被發送
???????????????????
??????????????????? ZeroMemory(&(PerIoData->Overlapped),?? sizeof(OVERLAPPED));??
???
??????????????????? PerIoData->DataBuf.buf?? =?? PerIoData->Buffer?? +?? PerIoData->BytesSEND;??
??????????????????? PerIoData->DataBuf.len?? =?? PerIoData->BytesRECV?? -?? PerIoData->BytesSEND;??
???
??????????????????? if?? (WSASend(PerHandleData->Socket,?? &(PerIoData->DataBuf),?? 1,?? &SendBytes,?? 0,??
????????????????????????? &(PerIoData->Overlapped),?? NULL)?? ==?? SOCKET_ERROR)??
??????????????????? {??
????????????????????????? if?? (WSAGetLastError()?? !=?? ERROR_IO_PENDING)??
????????????????????????? {??
??????????????????????????????? printf("WSASend() 發生了如下錯誤:?? %d\n",?? WSAGetLastError());??
??????????????????????????????? return?? 0;??
????????????????????????? }??
??????????????????? }??
????????????? }??
????????????? else??
????????????? {??
??????????????????? PerIoData->BytesRECV?? =?? 0;??
??? //現在沒有更多的字節發送過去用來post另外一個WSARecv()請求
???????????????????
??????????????????? Flags?? =?? 0;??
??????????????????? ZeroMemory(&(PerIoData->Overlapped),?? sizeof(OVERLAPPED));??
???
??????????????????? PerIoData->DataBuf.len?? =?? DATA_BUFSIZE;??
??????????????????? PerIoData->DataBuf.buf?? =?? PerIoData->Buffer;??
???
??????????????????? if?? (WSARecv(PerHandleData->Socket,?? &(PerIoData->DataBuf),?? 1,?? &RecvBytes,?? &Flags,??
????????????????????????? &(PerIoData->Overlapped),?? NULL)?? ==?? SOCKET_ERROR)??
??????????????????? {??
????????????????????????? if?? (WSAGetLastError()?? !=?? ERROR_IO_PENDING)??
????????????????????????? {??
??????????????????????????????? printf("WSARecv() 發生了如下錯誤:?? %d\n",?? WSAGetLastError());??
??????????????????????????????? return?? 0;??
????????????????????????? }??
??????????????????? }??
????????????? }??
??????? }??
}??

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲黄一区二区三区| 亚洲国产aⅴ天堂久久| 这里只有精品丝袜| 一本一本久久a久久精品牛牛影视| 亚洲国产一区二区三区青草影视| 欧美不卡福利| 亚洲丶国产丶欧美一区二区三区| 亚洲第一久久影院| 亚洲精品一区二区三区av| 亚洲视频视频在线| 亚洲男人第一网站| 久久伊人一区二区| 欧美日韩国产色视频| 国产精品自拍一区| 尤物九九久久国产精品的特点| 亚洲精华国产欧美| 亚洲一区综合| 久久蜜臀精品av| 亚洲精品久久7777| 亚洲影视九九影院在线观看| 亚洲欧美视频一区| 美日韩精品免费观看视频| 国产精品高精视频免费| 国内外成人在线| 一区二区三区波多野结衣在线观看| 亚洲一区二区三区乱码aⅴ| 久久免费精品视频| 一区二区三区国产| 久久一区免费| 国产亚洲精品bt天堂精选| 亚洲精品在线观| 久久综合影视| 翔田千里一区二区| 国产精品久久久久免费a∨| 亚洲高清不卡在线观看| 欧美影院精品一区| 亚洲精品一级| 欧美激情按摩| 亚洲激情一区| 理论片一区二区在线| 亚洲视屏在线播放| 久久永久免费| 国产色视频一区| aa亚洲婷婷| 蜜桃av噜噜一区二区三区| 亚洲一区二区三区在线看| 欧美国产极速在线| 1000部国产精品成人观看| 欧美影院精品一区| 亚洲视频在线观看网站| 欧美精选在线| 日韩视频二区| 亚洲黄色av| 免费亚洲电影在线观看| 在线日韩av片| 女女同性精品视频| 麻豆精品网站| 亚洲电影视频在线| 欧美国产日韩二区| 欧美高清在线观看| 亚洲精品乱码久久久久久按摩观| 欧美福利电影网| 裸体女人亚洲精品一区| 91久久久在线| 日韩一区二区精品在线观看| 欧美激情精品久久久久久蜜臀 | 久久资源在线| 亚洲欧美国产高清va在线播| 国产精品久久久久久久久久直播| 亚洲国产精品日韩| 欧美黄色影院| 亚洲欧美激情诱惑| 亚洲欧美在线看| 国内精品国产成人| 美女视频一区免费观看| 欧美国产91| 午夜精品一区二区三区四区| 香蕉久久夜色精品国产| 亚洲国产精品一区二区第四页av| 亚洲大胆美女视频| 欧美精品一区二区三区久久久竹菊| 亚洲欧洲免费视频| av成人动漫| 国产一区999| 免费一区二区三区| 欧美精品一区二区蜜臀亚洲| 亚洲自拍偷拍福利| 久久精品视频在线播放| 亚洲欧洲日本一区二区三区| 日韩视频免费在线观看| 国产欧美日韩不卡免费| 欧美多人爱爱视频网站| 国产精品美女视频网站| 久久综合久久综合久久| 欧美日韩国产成人在线| 久久久国产精品一区二区中文| 老鸭窝91久久精品色噜噜导演| 久久亚洲春色中文字幕| 欧美精品导航| 欧美一区国产一区| 欧美aⅴ99久久黑人专区| 亚洲欧美日韩精品久久奇米色影视 | 亚洲一区免费网站| 欧美在线亚洲在线| 一本久道久久综合婷婷鲸鱼| 亚洲女女女同性video| 亚洲激情一区二区三区| 亚洲一区激情| 亚洲精品欧美日韩专区| 欧美伊人久久大香线蕉综合69| 日韩亚洲不卡在线| 欧美在线观看网址综合| 亚洲午夜影视影院在线观看| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲深爱激情| 久久综合影视| 久久视频国产精品免费视频在线| 欧美老女人xx| 欧美国产极速在线| 韩日视频一区| 欧美一级久久久久久久大片| 亚洲婷婷在线| 欧美精品一区二区三区久久久竹菊| 久久午夜精品| 国产亚洲毛片| 亚洲欧美激情诱惑| 亚洲欧美日韩久久精品| 欧美久久在线| 亚洲九九精品| 一区二区黄色| 欧美日韩国产页| 亚洲伦理在线免费看| 亚洲精品中文字| 欧美高清不卡| 亚洲欧洲日夜超级视频| 亚洲欧洲另类| 欧美精品在线看| 日韩视频免费| 亚洲欧美综合v| 国产精品自拍在线| 午夜一区二区三视频在线观看| 亚洲女同性videos| 国产精品福利久久久| 这里只有精品丝袜| 亚洲综合色自拍一区| 国产精品视频免费观看| 亚洲欧美成aⅴ人在线观看| 欧美一区二区三区四区在线观看| 国产精品免费在线| 久久国产精品亚洲77777| 久久精品免费观看| 黄色亚洲在线| 欧美风情在线| 一区二区三欧美| 久久精品视频va| 亚洲电影欧美电影有声小说| 欧美国产激情| 亚洲一区高清| 久久性色av| 日韩一区二区免费高清| 国产精品va| 国产精品国产三级国产专区53| 久久久精品五月天| 亚洲黄色小视频| 欧美日韩综合一区| 欧美一级黄色录像| 亚洲高清一区二| 午夜欧美不卡精品aaaaa| 国产一区二区三区奇米久涩| 男人的天堂亚洲在线| a91a精品视频在线观看| 麻豆freexxxx性91精品| 一本久久综合亚洲鲁鲁五月天| 国产精品久久精品日日| 久久久国产午夜精品| 亚洲人成在线播放| 欧美专区一区二区三区| 亚洲国产精品女人久久久| 国产精品wwwwww| 久久综合久久综合这里只有精品| 亚洲毛片在线观看| 欧美成人a∨高清免费观看| 亚洲欧美第一页| 亚洲精品日韩在线| 国内外成人免费激情在线视频网站 | 免费久久99精品国产自| 亚洲欧美日韩一区二区三区在线| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲黄页一区| 国产精品伊人日日| 欧美激情第六页| 久久久噜噜噜久久| 亚洲欧美伊人| 一区二区三区四区五区视频| 久久综合网络一区二区| 午夜精品成人在线| 亚洲少妇自拍| 中日韩在线视频| 日韩特黄影片| 亚洲激情偷拍|