阻塞模式和非阻塞模式

使用socket編程實現(xiàn)數(shù)據(jù)傳輸?shù)倪^程中,通常的默認(rèn)設(shè)置假設(shè)套接字是阻塞的。每個TCP套接字有一個發(fā)送緩沖區(qū)典勇,當(dāng)應(yīng)用進程調(diào)用write操作的時候,內(nèi)核從應(yīng)用進程的緩沖區(qū)中復(fù)制數(shù)據(jù)到套接字的發(fā)送緩沖區(qū)中叮趴。

如果套接字的發(fā)送緩沖區(qū)無法完全的容納應(yīng)用的應(yīng)用程序所發(fā)送的數(shù)據(jù)割笙,即應(yīng)用程序的緩沖區(qū)大于套接字發(fā)送緩沖區(qū)或套接字緩沖區(qū)還有其他數(shù)據(jù),應(yīng)用進程將會被掛起并疫向。內(nèi)核將不從write系統(tǒng)條用返回咳蔚,直到應(yīng)用進程緩沖區(qū)中的所有數(shù)據(jù)都復(fù)制到套接字發(fā)送緩沖區(qū)豪嚎。
所以搔驼,從寫一個tcp套接字的write調(diào)用成功返回僅僅表示可以重新使用應(yīng)用進程的緩沖區(qū),并不表示對端的應(yīng)用進程已經(jīng)接收到了數(shù)據(jù)侈询。

下面是發(fā)送和接收兩個方面說明“阻塞”和“非阻塞”模式的區(qū)別:

(1)發(fā)送操作:write 舌涨、writev、send扔字、sendto囊嘉、sendmsg

對于tcp套接字,內(nèi)核將從應(yīng)用進程的緩沖區(qū)向該套接字的的發(fā)送緩沖區(qū)復(fù)制數(shù)據(jù)革为。對于阻塞的套接字扭粱,如果其發(fā)送緩沖區(qū)中沒有空間,進程將掛起震檩,直到有空間為止琢蛤。
對于一個非阻塞的tcp套接字蜓堕,如果其發(fā)送緩沖區(qū)中根本就沒有空間,發(fā)送函數(shù)調(diào)用將立即返回一個EWOULDBLOCK錯誤博其。如果其緩沖區(qū)中有一些空間套才,返回值將是內(nèi)核能夠復(fù)制到該緩沖區(qū)中的字節(jié)數(shù)。

對于UDP套接字慕淡,不存在真正的發(fā)送緩沖區(qū)背伴。內(nèi)核只是復(fù)制應(yīng)用進程數(shù)據(jù)并把它沿協(xié)議棧向下傳送,一次加上UDP頭部和IP頭部峰髓。因此傻寂,對一個阻塞的UDP套接字,發(fā)送函數(shù)調(diào)用將不會因為與TCP套接字一樣的原因而阻塞携兵,不過有可能會因為其他原因而阻塞崎逃。

(2)接受操作 read readv recv recvfrom recvmsg
如果某個進程對一個阻塞的TCP套接字調(diào)用這些輸入函數(shù)之一,而該套接字的接受緩沖區(qū)沒有數(shù)據(jù)可以讀眉孩,該進程將被掛起个绍,直到到達一些數(shù)據(jù)。tcp是字節(jié)流協(xié)議浪汪,只要到達一些數(shù)據(jù)巴柿,該進程就會被喚醒,這些數(shù)據(jù)既可能是單個字節(jié)死遭,也可以是一個完整的TCP分節(jié)中的數(shù)據(jù)广恢。

UDP是數(shù)據(jù)包協(xié)議,如果一個阻塞的UDP套接字的接受緩沖區(qū)為空呀潭,對它調(diào)用接收函數(shù)的進程將被掛起钉迷,直到到達一個UDP數(shù)據(jù)報。

對于非阻塞的套接字钠署,如果接收操作不能被滿足(對于UDP套接字即有一個完整的數(shù)據(jù)報可讀)糠聪,相應(yīng)的調(diào)用將立即返回一個EWOULDBLOCK錯誤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谐鼎,一起剝皮案震驚了整個濱河市舰蟆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狸棍,老刑警劉巖身害,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異草戈,居然都是意外死亡塌鸯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門唐片,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丙猬,“玉大人丢习,你說我怎么就攤上這事』吹浚” “怎么了咐低?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袜腥。 經(jīng)常有香客問我见擦,道長,這世上最難降的妖魔是什么羹令? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任鲤屡,我火速辦了婚禮,結(jié)果婚禮上福侈,老公的妹妹穿的比我還像新娘酒来。我一直安慰自己,他們只是感情好肪凛,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布堰汉。 她就那樣靜靜地躺著,像睡著了一般伟墙。 火紅的嫁衣襯著肌膚如雪翘鸭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天戳葵,我揣著相機與錄音就乓,去河邊找鬼。 笑死拱烁,一個胖子當(dāng)著我的面吹牛生蚁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戏自,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼邦投,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浦妄?” 一聲冷哼從身側(cè)響起尼摹,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剂娄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玄呛,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡阅懦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了徘铝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耳胎。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惯吕,死狀恐怖朽褪,靈堂內(nèi)的尸體忽然破棺而出硬猫,到底是詐尸還是另有隱情发皿,我是刑警寧澤灿里,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布告匠,位于F島的核電站申尤,受9級特大地震影響趾断,放射性物質(zhì)發(fā)生泄漏媚送。R本人自食惡果不足惜兆蕉,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一羽戒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虎韵,春花似錦易稠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至测萎,卻和暖如春衬吆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绳泉。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工逊抡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人零酪。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓冒嫡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親四苇。 傳聞我的和親對象是個殘疾皇子孝凌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 《UNIX 網(wǎng)絡(luò)編程卷一:套接字聯(lián)網(wǎng)API》筆記 套接字 套接字編程接口,是在 TCP/IP 協(xié)議族中月腋,應(yīng)用層進入...
    超net閱讀 5,797評論 2 13
  • 最近在看《UNIX網(wǎng)絡(luò)編程 卷1》和《FREEBSD操作系統(tǒng)設(shè)計與實現(xiàn)》這兩本書蟀架,我重點關(guān)注了TCP協(xié)議相關(guān)的內(nèi)容...
    腩啵兔子閱讀 1,164評論 0 7
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司榆骚,掛了不少片拍,但最終還是拿到小米、百度妓肢、阿里捌省、京東、新浪碉钠、CVTE纲缓、樂視家的研發(fā)崗...
    時芥藍閱讀 42,240評論 11 349
  • 轉(zhuǎn)自: http://www.reibang.com/p/486b0965c296 http://www.jia...
    demop閱讀 3,886評論 1 21
  • 文本挖掘現(xiàn)在是無處不在啊卷拘,之前在工作中涉及到一些文本挖掘的問題,但都不是很深入祝高。最近在復(fù)習(xí)機器學(xué)習(xí)算法栗弟,看到貝葉斯...
    雨一流閱讀 1,015評論 0 0