close
Blocking (阻塞技術)
Blocking你可以把它想像成是Sleep,不同的是,它是停在那邊,等待者一個人來觸發他。
舉個例子吧,我們在直行listen的時候會發現,listen()會一直在那邊等待,直到有人connect的時候才會繼續有動作。
當你先用socket()建立descriptor(描述)時,kernel會將它設為blocking,如果你不想要啟動blocking socket的話,則必須呼叫fcntl() :
#include <…>
#include <…>
…
…
Sockfd = socket( PF_INET , SOCKET_STREAM , 0 ) ;
Fcntl ( Sockfd ,F_SETFL , O_NONBLOCK ) ;
將Socket設為non-blocking (非阻塞),你就能”Poll”(輪詢) socket已取得資訊 。 (此次專案的下一個階段似乎就要用這種方式,這個技術可能下一個月左右會用到)。
※PS,Polling是一種不好的想法,因為如果你讓程式一直在忙碌的查找socket上是否有資料,就會浪費CPU的時間,這樣不太好,比較好的方式應該是用Select()來檢查Socket是否需要讀取 。 ( 先記者,下個月在和主管討論這部分 )。
全站熱搜
留言列表