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已取得資訊 (此次專案的下一個階段似乎就要用這種方式,這個技術可能下一個月左右會用到)

 

PSPolling是一種不好的想法,因為如果你讓程式一直在忙碌的查找socket上是否有資料,就會浪費CPU的時間,這樣不太好,比較好的方式應該是用Select()來檢查Socket是否需要讀取 ( 先記者,下個月在和主管討論這部分 )

arrow
arrow
    全站熱搜

    Eric 發表在 痞客邦 留言(0) 人氣()