#include "stdafx.h"
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
// listen port
u_short nlistenport = 5018;
// initilize the listen socket
bool initandlisten(socket &slisten)
sockaddr_in local;
local.sin_family = af_inet;
local.sin_addr.s_addr = htonl(inaddr_any);
local.sin_port = htons(nlistenport);
// initial socket
slisten = socket(af_inet,sock_stream,0);
if(slisten == invalid_socket)
// set socket nonblocking
u_long ul = 1;
if (ioctlsocket(slisten,fionbio,&ul) != 0)
// bind socket
if(bind(slisten,(sockaddr*)&local,sizeof(local)) != 0)
// listen socket
if(listen(slisten,64) != 0)
else
return true;
}int main(int argc, char* argv)
socket slisten;
if(!initandlisten(slisten))
printf("server wait for client connect.../n");
fd_set fdsocket;
fd_zero(&fdsocket);
fd_set(slisten,&fdsocket);
while (true)
for(int i=0;i<(int)fdsocket.fd_count;i++)
else
else}}
}}closesocket(slisten);
wsacleanup();
return 0;
}
伺服器IO模型之Select
阻塞與非阻塞 select模型目的 主要是避免在套接字呼叫上阻塞的應用程式有能力管理多個套接字,即是單一執行緒模式下只能處理乙個套接字的問題,這樣可以避免執行緒膨脹。select模型函式 int select in int nfds,inout fd set readfds,inout fd set...
Linux C select伺服器原始碼剖析
直接看呼叫主函式中while迴圈的部分 每次呼叫select都會改變fd set的值,所以要兩個變數,allset,以及乙個rset 先看看是否有客戶端請求連線,如果有處理連線。這裡用新開乙個陣列維護檔案描述符。這樣的好處是如果用動態陣列,可以動態維護檔案描述符。遍歷整個客戶端的陣列,然後來看看有沒...
linux c select 伺服器原始碼 簡介
直接看呼叫主函式中while迴圈的部分 每次呼叫select都會改變fd set的值,所以要兩個變數,allset,以及乙個rset 先看看是否有客戶端請求連線,如果有處理連線。這裡用新開乙個陣列維護檔案描述符。這樣的好處是如果用動態陣列,可以動態維護檔案描述符。遍歷整個客戶端的陣列,然後來看看有沒...