阻塞即同步,一件事情沒有完成必然不會往下執行;
非阻塞即非同步,不管當前事情有沒有完成,都會往下執行;
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 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...