重疊 overlapped 模型

2021-07-11 20:15:19 字數 2364 閱讀 5351

///

#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套接字。由於編寫非同步套...