最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux UDP socket 設(shè)置為的非阻塞模式與阻塞模式區(qū)別

 更新時(shí)間:2017年02月23日 15:10:40   投稿:lqh  
這篇文章主要介紹了Linux UDP socket 設(shè)置為的非阻塞模式與阻塞模式區(qū)別的相關(guān)資料,需要的朋友可以參考下

Linux UDP socket 設(shè)置為的非阻塞模式與阻塞模式區(qū)別

UDP socket 設(shè)置為的非阻塞模式

Len = recvfrom(SocketFD, szRecvBuf, sizeof(szRecvBuf), MSG_DONTWAIT, (struct sockaddr *)&SockAddr,&ScokAddrLen);

UDP socket 設(shè)置為的阻塞模式

Len = recvfrom(SocketFD, szRecvBuf, sizeof(szRecvBuf), 0, (struct sockaddr *)&SockAddr,&ScokAddrLen);

Linux socket編程之阻塞套接字和非阻塞套接字

  每一個(gè)TCP套接口有一個(gè)發(fā)送緩沖區(qū),可以用SO_SNDBUF套接口選項(xiàng)來改變這個(gè)緩沖區(qū)的大小。當(dāng)應(yīng)用進(jìn)程調(diào)用 write時(shí),內(nèi)核從應(yīng)用進(jìn)程的緩沖區(qū)中拷貝所有數(shù)據(jù)到套接口的發(fā)送緩沖區(qū)。如果套接口的發(fā)送緩沖區(qū)容不下應(yīng)用程序的所有數(shù)據(jù)(或是應(yīng)用進(jìn)程的緩沖區(qū)大于套接口發(fā)送緩沖區(qū),或是套接口發(fā)送緩沖區(qū)還有其他數(shù)據(jù)),應(yīng)用進(jìn)程將被掛起(睡眠)。這里假設(shè)套接口是阻塞的,這是通常的缺省設(shè)置。內(nèi)核將不從write系統(tǒng)調(diào)用返回,直到應(yīng)用進(jìn)程緩沖區(qū)中的所有數(shù)據(jù)都拷貝到套接口發(fā)送緩沖區(qū)。因此從寫一個(gè)TCP套接口的write調(diào)用成功返回僅僅表示我們可以重新使用應(yīng)用進(jìn)程的緩沖區(qū)。它并不告訴我們對(duì)端的 TCP或應(yīng)用進(jìn)程已經(jīng)接收了數(shù)據(jù)。 

    TCP取套接口發(fā)送緩沖區(qū)的數(shù)據(jù)并把它發(fā)送給對(duì)端TCP,其過程基于TCP數(shù)據(jù)傳輸?shù)乃幸?guī)則。對(duì)端TCP必須確認(rèn)收到的數(shù)據(jù),只有收到對(duì)端的ACK,本端TCP才能刪除套接口發(fā)送緩沖區(qū)中已經(jīng)確認(rèn)的數(shù)據(jù)。TCP必須保留數(shù)據(jù)拷貝直到對(duì)端確認(rèn)為止。

1 輸入操作: read、readv、recv、recvfrom、recvmsg

    如果某個(gè)進(jìn)程對(duì)一個(gè)阻塞的TCP套接口調(diào)用這些輸入函數(shù)之一,而且該套接口的接收緩沖區(qū)中沒有數(shù)據(jù)可讀,該進(jìn)程將被投入睡眠,直到到達(dá)一些數(shù)據(jù)。既然 TCP是字節(jié)流協(xié)議,該進(jìn)程的喚醒就是只要到達(dá)一些數(shù)據(jù):這些數(shù)據(jù)既可能是單個(gè)字節(jié),也可以是一個(gè)完整的TCP分節(jié)中的數(shù)據(jù)。如果想等到某個(gè)固定數(shù)目的數(shù)據(jù)可讀為止,可以調(diào)用readn函數(shù),或者指定MSG_WAITALL標(biāo)志。

    既然UDP是數(shù)據(jù)報(bào)協(xié)議,如果一個(gè)阻塞的UDP套接口的接收緩沖區(qū)為空,對(duì)它調(diào)用輸入函數(shù)的進(jìn)程將被投入睡眠,直到到達(dá)一個(gè)UDP數(shù)據(jù)報(bào)。

    對(duì)于非阻塞的套接口,如果輸入操作不能被滿足(對(duì)于TCP套接口即至少有一個(gè)字節(jié)的數(shù)據(jù)可讀,對(duì)于UDP套接口即有一個(gè)完整的數(shù)據(jù)報(bào)可讀),相應(yīng)調(diào)用將立即返回一個(gè)EWOULDBLOCK錯(cuò)誤。

2 輸出操作:write、writev、send、sendto、sendmsg

    對(duì)于一個(gè)TCP套接口,內(nèi)核將從應(yīng)用進(jìn)程的緩沖區(qū)到該套接口的發(fā)送緩沖區(qū)拷貝數(shù)據(jù)。對(duì)于阻塞的套接口,如果其發(fā)送緩沖區(qū)中沒有空間,進(jìn)程將被投入睡眠,直到有空間為止。

    對(duì)于一個(gè)非阻塞的TCP套接口,如果其發(fā)送緩沖區(qū)中根本沒有空間,輸出函數(shù)調(diào)用將立即返回一個(gè)EWOULDBLOCK錯(cuò)誤。如果其發(fā)送緩沖區(qū)中有一些空間,返回值將是內(nèi)核能夠拷貝到該緩沖區(qū)中的字節(jié)數(shù)。這個(gè)字節(jié)數(shù)也稱為不足計(jì)數(shù)(short count)

    UDP套接口不才能在真正的發(fā)送緩沖區(qū)。內(nèi)核只是拷貝應(yīng)用進(jìn)程數(shù)據(jù)并把它沿協(xié)議棧向下傳送,漸次冠以UDP頭部和IP頭部。因此對(duì)一個(gè)阻塞的UDP套接口,輸出函數(shù)調(diào)用將不會(huì)因?yàn)榕cTCP套接口一樣的原因而阻塞,不過有可能會(huì)因其他的原因而阻塞。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Linux下通過sed命令對(duì)kv方式的配置文件進(jìn)行修改

    Linux下通過sed命令對(duì)kv方式的配置文件進(jìn)行修改

    sed是unix下的面向字符流的編輯器,即stream editor, 它是面向行的,以行為單位進(jìn)行處理,同時(shí),sed是非交互式的,一旦執(zhí)行便要處理完整個(gè)文件。這篇文章主要介紹了Linux下通過sed命令對(duì)kv方式的配置文件進(jìn)行修改,需要的朋友可以參考下
    2018-11-11
  • Linux安裝redis后沒有redis-server的問題

    Linux安裝redis后沒有redis-server的問題

    這篇文章主要介紹了Linux安裝redis后沒有redis-server的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Linux使用fdisk實(shí)現(xiàn)磁盤分區(qū)過程圖解

    Linux使用fdisk實(shí)現(xiàn)磁盤分區(qū)過程圖解

    這篇文章主要介紹了Linux使用fdisk實(shí)現(xiàn)磁盤分區(qū)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)存管理筆記整理

    Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)存管理筆記整理

    今天小編就為大家分享一篇關(guān)于Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)存管理筆記整理,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 詳解CentOS7下安裝Mysql和配置mysql

    詳解CentOS7下安裝Mysql和配置mysql

    本篇文章主要介紹了詳解CentOS7下安裝Mysql和配置mysql,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • linux中expect的介紹與使用示例

    linux中expect的介紹與使用示例

    expect是一種自動(dòng)交互語言,能實(shí)現(xiàn)在shell腳本中為scp和ssh等自動(dòng)輸入密碼自動(dòng)登錄。下面這篇文章主要介紹了linux中使用expect的方法示例,需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • Win8.1 + CentOS7 雙系統(tǒng) U盤安裝(超詳細(xì)教程)

    Win8.1 + CentOS7 雙系統(tǒng) U盤安裝(超詳細(xì)教程)

    這篇文章主要介紹了Win8.1 + CentOS7 雙系統(tǒng) U盤安裝(超詳細(xì)教程),非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-01-01
  • Linux中date命令轉(zhuǎn)換日期提示date: illegal time format問題解決

    Linux中date命令轉(zhuǎn)換日期提示date: illegal time format問題解決

    date命令是顯示或設(shè)置系統(tǒng)時(shí)間與日期,最近在使用中發(fā)現(xiàn)了一個(gè)問題,所以下面這篇文章主要給大家介紹了關(guān)于Linux中date命令轉(zhuǎn)換日期提示date: illegal time format錯(cuò)誤的解決方法,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-12-12
  • 一篇文章弄懂Linux磁盤和磁盤分區(qū)

    一篇文章弄懂Linux磁盤和磁盤分區(qū)

    分區(qū)是將一個(gè)硬盤驅(qū)動(dòng)器分成若干個(gè)邏輯驅(qū)動(dòng)器,分區(qū)是把硬盤連續(xù)的區(qū)塊當(dāng)做一個(gè)獨(dú)立的磁硬使用。下面這篇文章主要給大家介紹了關(guān)于Linux磁盤和磁盤分區(qū)的相關(guān)資料,需要的朋友可以參考下
    2018-12-12
  • Linux軟連接實(shí)現(xiàn)方式

    Linux軟連接實(shí)現(xiàn)方式

    文章介紹了Linux軟連接的概念,類似于Windows的快捷方式,軟連接可以通過`ln -s`命令創(chuàng)建,參數(shù)1是被鏈接的文件或文件夾,參數(shù)2是要鏈接的目的地,如果參數(shù)2不存在時(shí),會(huì)直接建立軟連接;如果參數(shù)2存在時(shí),軟連接會(huì)建立在參數(shù)2文件夾內(nèi)
    2024-11-11

最新評(píng)論

勐海县| 乌兰察布市| 陆河县| 遵义市| 吕梁市| 衢州市| 图片| 纳雍县| 黑河市| 汤原县| 锡林郭勒盟| 通城县| 山东| 塘沽区| 延吉市| 北海市| 从化市| 南靖县| 保定市| 孝感市| 白银市| 方正县| 高密市| 盘锦市| 大理市| 镇沅| 巴楚县| 会理县| 吉林省| 镶黄旗| 孝昌县| 台北市| 弥渡县| 辉南县| 临武县| 奉贤区| 扬中市| 汉中市| 舟山市| 光泽县| 丰都县|