epoll ET邊沿非阻塞

2021-09-04 05:59:32 字數 1280 閱讀 1937

#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語句中,表示該語句結束時完成賦值操作,結果與語句順序無關,並行關係 可以這樣理解 阻塞...