完成埠網上的例子很多,但覺得都挺複雜的
寫了乙個簡化版的,方便學習,也加了注釋。
有任何問題,歡迎跟我討論。
*****===**來了*****====
#include
<
winsock2.h
>
#include
<
mswsock.h
>
#include
<
windows.h
>
#include
<
iostream
>
using
namespace
std;
intg_threadcount;
handle g_hiocp
=invalid_handle_value;
socket g_serversocket
=invalid_socket;
//maximum buffer size
#define
max_buff_size 8192
enum
io_operation;
struct
char
buffer[max_buff_size];
wsabuf wsabuf;
intntotalbytes;
int=
null;
io_data
*lpiocontext
=null;
wsabuf buffsend;
dword dwrecvnumbytes =0
;dword dwsendnumbytes =0
;dword dwflags =0
;dword dwiosize =0
;bool bsuccess
=false;
intnret =0
;while( 1
) lpiocontext
=(io_data *if
(dwiosize ==0
) //
socket closed?
if(lpiocontext
->
opcode
==io_read)
//a read operation complete
}else
if(lpiocontext
->
opcode
==io_write)
//a write operation complete
} else }
}}return0;
}void
main (
intargc,
char
*argv)}}
}}if(createiocompletionport((handle)g_serversocket,g_hiocp,0,
0) ==null)}}
if(createiocompletionport((handle)ls,g_hiocp,0,
0) ==null)
else}}
}closesocket(g_serversocket);
wsacleanup();
}
ACE中使用完成埠
使用ace中的proactor的話,會要比我們使用我們直接寫的要來得簡單。在說proactor之前我們需要了解windows裡的完成埠的工作原理。完成埠是winnt核心裡的乙個框架。我們可以為我們的一些非同步的操作 新建乙個完成埠,然後這個完成埠會有幾個工作執行緒來處理。我們 可以將socket,或...
使用完成埠框架開發非同步模組
static handle g hiocp static dword winapi worker lpvoid pvd static const int buf len 256 struct myperiodata int tmain int argc,tchar argv printf s n p...
使用完成埠的單台伺服器最多可連線2500個客戶端
typedef struct per handle data,lpper handle data dword stdcall serverworkerthread lpvoid pletionportid void main void if pletionport createio pletionp...