select模型的伺服器原始碼

2021-05-01 10:42:47 字數 1222 閱讀 5716

#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 先看看是否有客戶端請求連線,如果有處理連線。這裡用新開乙個陣列維護檔案描述符。這樣的好處是如果用動態陣列,可以動態維護檔案描述符。遍歷整個客戶端的陣列,然後來看看有沒...