#include #include #include #include #include #include #include #include #include #include #include int main(int argc, const char* argv)
struct sockaddr_in serv_addr;
socklen_t serv_len = sizeof(serv_addr);
int port = atoi(argv[1]);
// 建立套接字
int lfd = socket(af_inet, sock_stream, 0);
// 初始化伺服器 sockaddr_in
memset(&serv_addr, 0, serv_len);
serv_addr.sin_family = af_inet; // 位址族
serv_addr.sin_addr.s_addr = htonl(inaddr_any); // 監聽本機所有的ip
serv_addr.sin_port = htons(port); // 設定埠
// 繫結ip和埠
bind(lfd, (struct sockaddr*)&serv_addr, serv_len);
// 設定同時監聽的最大個數
listen(lfd, 36);
printf("start accept ......\n");
struct sockaddr_in client_addr;
socklen_t cli_len = sizeof(client_addr);
// 建立epoll樹根節點
int epfd = epoll_create(2000);
// 初始化epoll樹
struct epoll_event ev;
// 設定邊沿觸發
ev.events = epollin;
ev.data.fd = lfd;
epoll_ctl(epfd, epoll_ctl_add, lfd, &ev);
struct epoll_event all[2000];
while(1)
if(len == 0)
close(fd);
}else if(len == -1)
else}}
}}
close(lfd);
return 0;
}
epoll水平觸發 邊沿觸發與非阻塞I O模型
epoll作為多路i o復用在linux的實現,無論是在模型方面,還是執行效率方面,相較於select和poll都有了較大改進。水平觸發 凡是epoll負責的輸入輸出源緩衝區有資料可讀或者可寫,epoll wait 就不會阻塞,或者說會通知。邊沿觸發 凡是epoll負責的輸入輸出源的緩衝區有新的資料...
阻塞 非阻塞
阻塞和非阻塞指 的是在接收和傳送時是否等待動作完成才返回 舉例 阻塞 block 是指,你撥通某人 的 但是此人不在,於是你拿著 等他回來,其間不能再用 非阻塞 nonblock 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...
阻塞非阻塞
阻塞和非阻塞 阻塞 可用在assign語句和always語句中,表示只要源訊號發生變化,目標訊號就立刻完成賦值操作,在always塊中,結果與語句順序有關,在always塊中是順序關係 非阻塞 只能用在always語句中,表示該語句結束時完成賦值操作,結果與語句順序無關,並行關係 可以這樣理解 阻塞...