linux socket非阻塞模式下筆記

2021-06-28 00:24:12 字數 620 閱讀 2012

阻塞即同步,一件事情沒有完成必然不會往下執行;

非阻塞即非同步,不管當前事情有沒有完成,都會往下執行;

linux socket下面,最常用的函式便是recvfrom/sendto, recv/send,前面那一對是基於udp的,後面是基於tcp。這兩組函式都有阻塞和非阻塞方式,可以通過fcntl函式設定。

說到這裡,順便提一下fcntl函式,這個系統呼叫是用來重新設定開啟裝置/檔案的屬性,包括讀、寫、非阻塞等,而無需重新開啟檔案。

值得一提的是,採用非阻塞形式的i/o可以用來編寫簡單的心跳檢測程式,測試伺服器是否在執行。**之後補充。。。。。。

基本流程如下:

if (-1 == fcntl(fd, f_setfl, o_nonblock))// set the fd to nonblock

fd_set readfds;

fd_zero(&readfds);//clean

fd_set(fd, &readfds);//add

struct timeval tv=;//set the time

if (selectfd+1,&readfds,null, null, &tv) > 0)

else

Linux socket非阻塞connect方法

socket non blocking mode connect 對於面向連線的socket型別 sock stream,sock seqpacket 在讀寫資料之前必須建立連線,connect 函式用於完成面向連線的socket的建鏈過程,對於tcp,也就是三次握手過程。connect 函式 標頭...

Python之阻塞IO模型與非阻塞IO模型

python之阻塞io模型與非阻塞io模型 io模型 1 阻塞io 全程阻塞 2 非阻塞io 傳送多次系統呼叫 優點 wait for data時無阻塞 缺點 1 系統呼叫太多 2 資料不是實時接受的 兩個階段 wait for data 非阻塞 copy data 阻塞 3 io多路復用 監聽多個...

阻塞 非阻塞

阻塞和非阻塞指 的是在接收和傳送時是否等待動作完成才返回 舉例 阻塞 block 是指,你撥通某人 的 但是此人不在,於是你拿著 等他回來,其間不能再用 非阻塞 nonblock 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...