///
#include #include #include #include #pragma comment(lib, "ws2_32")
#define buffer_size 1024
typedef struct _socket_obj
socket_obj, *psocket_obj;
typedef struct _buffer_obj
buffer_obj, *pbuffer_obj;
handle g_events[wsa_maximum_wait_events]; // i/o事件控制代碼陣列
int g_nbuffercount; // 上陣列中有效控制代碼數量
pbuffer_obj g_pbufferhead, g_pbuffertail; // 記錄緩衝區物件組成的表的位址
// 申請套節字物件和釋放套節字物件的函式
psocket_obj getsocketobj(socket s)
return psocket;
}void freesocketobj(psocket_obj psocket)
pbuffer_obj getbufferobj(psocket_obj psocket, ulong nlen)
else
g_events[++ g_nbuffercount] = pbuffer->ol.hevent;
} return pbuffer;
}void freebufferobj(pbuffer_obj pbuffer)
else }
// 釋放它占用的記憶體空間
if(bfind) }
pbuffer_obj findbufferobj(handle hevent)
return pbuffer;
}void rebuildarray()
}bool postaccept(pbuffer_obj pbuffer)
return true;
} return false;
};bool postrecv(pbuffer_obj pbuffer)
return true;
}bool postsend(pbuffer_obj pbuffer)
return true;
}bool handleio(pbuffer_obj pbuffer)
if(psocket->noutstandingops == 0)
freesocketobj(psocket);
freebufferobj(pbuffer);
return false;
} // 沒有錯誤發生,處理已完成的i/o
switch(pbuffer->noperation)
rebuildarray();
// 將資料複製到傳送緩衝區
psend->nlen = dwtrans;
memcpy(psend->buff, pbuffer->buff, dwtrans);
// 投遞此傳送i/o(將資料回顯給客戶)
if(!postsend(psend))
// 繼續投遞接受i/o
postaccept(pbuffer);
} break;
case op_read: // 接收資料完成
else // 套節字關閉
if(psocket->noutstandingops == 0)
freesocketobj(psocket);
freebufferobj(pbuffer);
return false;
}} break;
case op_write: // 傳送資料完成
else // 套節字關閉
if(psocket->noutstandingops == 0)
freesocketobj(psocket);
freebufferobj(pbuffer);
return false;
}} break;
} return true;
}void main()
::wsasetevent(g_events[0]);
while(true)
nindex = nindex - wsa_wait_event_0;
for(int i=0; i<=nindex; i++)
// 處理這個i/o
pbuffer_obj pbuffer = findbufferobj(g_events[i]);
if(pbuffer != null)
}} }
::wsacleanup();
}
WinSock IO模型 重疊模型
設計的原理便是 讓應用程式使用乙個重疊的資料結構,一次投遞乙個或者多個io請求。1.建立乙個套接字,並在指定的埠上監聽。2.建立成功以後,將其與本地的介面繫結到一起,便可以進行重疊的io操作。3.接收乙個進入的請求。結構體的說明 注 函式通常會失敗,返回socket error狀態wsa io pe...
重疊 Overlapped IO模型
基本思想 允許應用程式使用重疊資料結構一次投遞乙個或者多個非同步io請求。1建立資料 socket slisten wsasocket af inet,sock stream,ipproto tcp,null,2傳輸資料 wsasend wsarecv tcp wsasendto wsarecvfr...
Socket模型之重疊I O模型
socket模型之重疊i o模型 這幾天一直在看關於socket程式設計的幾種非同步程式設計,我覺得關於重疊i o模型的一些基本知識,我有必要記下來。在實際的程式設計過程中,我們需要按照下面幾步來編寫我們的socket重疊模型的程式 一 在伺服器端 1 首先初始化socket套接字。由於編寫非同步套...