青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

   C++ 技術(shù)中心

   :: 首頁 :: 聯(lián)系 ::  :: 管理
  160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

公告

鄭重聲明:本BLOG所發(fā)表的原創(chuàng)文章,作者保留一切權(quán)利。必須經(jīng)過作者本人同意后方可轉(zhuǎn)載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com

留言簿(27)

搜索

  •  

最新隨筆

最新評論

評論排行榜

在Linux中使用非阻塞的socket的情形下。

(一)發(fā)送時(shí)

  當(dāng)客戶通過Socket提供的send函數(shù)發(fā)送大的數(shù)據(jù)包時(shí),就可能返回一個(gè)EAGAIN的錯(cuò)誤。該錯(cuò)誤產(chǎn)生的原因是由于send 函數(shù)中的size變量大小超過了tcp_sendspace的值。tcp_sendspace定義了應(yīng)用在調(diào)用send之前能夠在kernel中緩存的數(shù)據(jù)量。當(dāng)應(yīng)用程序在socket中設(shè)置了O_NDELAY或者O_NONBLOCK屬性后,如果發(fā)送緩存被占滿,send就會(huì)返回EAGAIN的錯(cuò)誤。

  為了消除該錯(cuò)誤,有三種方法可以選擇:
  1.調(diào)大tcp_sendspace,使之大于send中的size參數(shù)
  ---no -p -o tcp_sendspace=65536

  2.在調(diào)用send前,在setsockopt函數(shù)中為SNDBUF設(shè)置更大的值

  3.使用write替代send,因?yàn)閣rite沒有設(shè)置O_NDELAY或者O_NONBLOCK

(二)接收時(shí)

接收數(shù)據(jù)時(shí)常遇到Resource temporarily unavailable的提示,errno代碼為11(EAGAIN)。這表明你在非阻塞模式下調(diào)用了阻塞操作,在該操作沒有完成就返回這個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤不會(huì)破壞socket的同步,不用管它,下次循環(huán)接著recv就可以。對非阻塞socket而言,EAGAIN不是一種錯(cuò)誤。在VxWorks和Windows上,EAGAIN的名字叫做EWOULDBLOCK。其實(shí)這算不上錯(cuò)誤,只是一種異常而已。

  另外,如果出現(xiàn)EINTR即errno為4,錯(cuò)誤描述Interrupted system call,操作也應(yīng)該繼續(xù)。

  最后,如果recv的返回值為0,那表明對方已將連接斷開,我們的接收操作也應(yīng)該結(jié)束。

(三)以下是另一種解釋

假如發(fā)送端流量大于接收端的流量(意思是epoll所在的程序讀比轉(zhuǎn)發(fā)的socket要快),由于是非阻塞的socket,那么send()函數(shù)雖然返回,但實(shí)際緩沖區(qū)的數(shù)據(jù)并未真正發(fā)給接收端,這樣不斷的讀和發(fā),當(dāng)緩沖區(qū)滿后會(huì)產(chǎn)生EAGAIN錯(cuò)誤(參考man send),同時(shí),不理會(huì)這次請求發(fā)送的數(shù)據(jù).所以,

需要封裝socket_send()的函數(shù)用來處理這種情況,該函數(shù)會(huì)盡量將數(shù)據(jù)寫完再返回,返回-1表示出錯(cuò)。在socket_send()內(nèi)部,當(dāng)寫緩沖已滿(send()返回-1,且errno為EAGAIN),那么會(huì)等待后再重試.這種方式并不很完美,在理論上可能會(huì)長時(shí)間的阻塞在socket_send()內(nèi)部,但暫沒有更好的辦法.
這種方法類似于readn和writen的封裝(自己寫過,在《UNIX環(huán)境高級編程》中也有介紹)

  1. size_t socket_send(int sockfd, const char* buffer, size_t buflen)
  2. {
  3. size_t tmp;
  4. size_t total = buflen;
  5. const char *p = buffer;
  6. while(1)
  7. {
  8. tmp = send(sockfd, p, total, 0);
  9. if(tmp < 0)
  10. {
  11. // 當(dāng)send收到信號時(shí),可以繼續(xù)寫,但這里返回-1.
  12. if(errno == EINTR)
  13. {
  14. return -1;
  15. }
  16. // 當(dāng)socket是非阻塞時(shí),如返回此錯(cuò)誤,表示寫緩沖隊(duì)列已滿,
  17. // 在這里做延時(shí)后再重試.
  18. if(errno == EAGAIN)
  19. {
  20. usleep(1000);
  21. continue;
  22. }
  23. return -1;
  24. }
  25. if((size_t)tmp == total)
  26. {
  27. return buflen;
  28. }
  29. total -= tmp;
  30. p += tmp;
  31. }
  32. return tmp;
  33. }

posted on 2013-07-01 18:53 C++技術(shù)中心 閱讀(12634) 評論(0)  編輯 收藏 引用 所屬分類: Linux 編程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产亚洲欧美日韩一区二区| 亚洲视频在线观看网站| 亚洲私人影吧| 亚洲蜜桃精久久久久久久| 1024国产精品| 亚洲精品久久| 亚洲性xxxx| 久久福利视频导航| 久久久久久久久久久久久女国产乱| 久久av老司机精品网站导航| 久久久久国内| 亚洲国产精品成人久久综合一区 | 亚洲欧美日本精品| 久久精品国产77777蜜臀| 美国十次了思思久久精品导航| 蜜臀av国产精品久久久久| 亚洲成人资源网| 中国成人在线视频| 久久久久国产精品一区| 欧美激情一区二区久久久| 欧美视频你懂的| 伊人精品成人久久综合软件| 999亚洲国产精| 久久久欧美精品| 亚洲精品在线免费观看视频| 欧美亚洲自偷自偷| 欧美精品一区二区三区四区| 国产日韩欧美视频| 日韩网站在线看片你懂的| 久久成人免费| 夜夜爽www精品| 久久亚洲国产精品一区二区| 国产精品sss| 亚洲国产日韩一区二区| 欧美一级视频一区二区| 最新国产拍偷乱拍精品| 久久精品女人| 国产精品日韩欧美一区| 一区二区三区四区蜜桃| 久久婷婷丁香| 亚洲欧美另类在线观看| 欧美日韩国产一级| 亚洲国产合集| 美女视频黄a大片欧美| 亚洲嫩草精品久久| 欧美色网在线| 亚洲天堂av在线免费观看| 亚洲高清一二三区| 久久久久久久久岛国免费| 国产毛片一区| 亚洲三级色网| 亚洲欧洲日本专区| 久久亚洲欧美| 国产综合久久| 久久精品二区亚洲w码| 亚洲综合99| 国产精品麻豆va在线播放| 一本色道久久综合亚洲精品不卡| 亚洲电影自拍| 久久综合给合久久狠狠狠97色69| 国产综合色在线| 久久亚洲国产精品日日av夜夜| 亚洲免费一在线| 国产精品一区二区在线| 欧美在线黄色| 久久国产精品第一页| 国产日韩欧美在线看| 欧美一区二区免费| 亚洲综合三区| 好看的日韩av电影| 女女同性精品视频| 欧美成人激情视频免费观看| 亚洲精品乱码久久久久久日本蜜臀 | 一本色道久久综合亚洲精品小说| 亚洲成人中文| 欧美日韩一区在线播放| 午夜在线精品| 久久国产精品一区二区三区四区 | 西西人体一区二区| 欧美在线观看一区二区| 亚洲电影视频在线| 亚洲精品一区二区网址| 国产精品欧美日韩一区二区| 久久久久久久一区二区| 六月天综合网| 亚洲宅男天堂在线观看无病毒| 亚洲欧美www| 亚洲国产人成综合网站| 亚洲色图在线视频| 伊人久久亚洲热| 99精品国产一区二区青青牛奶| 国产农村妇女毛片精品久久莱园子 | 亚洲精品一区中文| 亚洲作爱视频| 国产综合亚洲精品一区二| 亚洲国内在线| 国产视频一区二区在线观看 | 久久亚洲精品一区二区| 在线一区观看| 久久大逼视频| 亚洲欧美国产毛片在线| 玖玖国产精品视频| 欧美一站二站| 久热国产精品| 久久综合精品一区| 亚洲综合色激情五月| 久久三级福利| 午夜欧美大片免费观看| 欧美激情1区| 久热综合在线亚洲精品| 国产精品swag| 亚洲乱码国产乱码精品精| 在线观看日韩av电影| 一区二区不卡在线视频 午夜欧美不卡'| 好吊妞这里只有精品| 亚洲欧美日韩中文播放| 亚洲视频视频在线| 欧美sm视频| 麻豆成人综合网| 国产日韩欧美三级| 亚洲视频免费| 中文在线资源观看网站视频免费不卡 | 在线视频国产日韩| 亚洲欧美日韩国产精品| 亚洲视频免费观看| 你懂的国产精品永久在线| 久久免费的精品国产v∧| 国产精品亚洲综合色区韩国| 日韩视频在线一区二区| 亚洲伦理中文字幕| 久久亚洲视频| 美日韩在线观看| 激情综合久久| 久久精品视频va| 久久亚洲电影| 在线播放亚洲一区| 久久久久一区| 欧美成人免费全部| 亚洲国产高清aⅴ视频| 美国成人直播| 亚洲电影免费观看高清完整版在线观看 | 欧美系列精品| 亚洲视频成人| 香蕉尹人综合在线观看| 国产精品美女黄网| 亚洲女同性videos| 久久久久久久尹人综合网亚洲| 国产精品一区二区你懂得| 午夜精品www| 久久噜噜噜精品国产亚洲综合| 国产日韩欧美日韩| 久久久噜噜噜久噜久久| 欧美激情久久久久| 亚洲免费观看视频| 亚洲免费在线精品一区| 久久久久国产精品午夜一区| 极品av少妇一区二区| 老司机免费视频久久| 亚洲黄色av一区| 亚洲一卡二卡三卡四卡五卡| 国产区精品视频| 久久激情一区| 欧美成人精品在线播放| 毛片基地黄久久久久久天堂| 国户精品久久久久久久久久久不卡 | 久久久久久网站| 欧美肥婆在线| 亚洲特色特黄| 国产亚洲精久久久久久| 久久资源在线| 一区二区三区精品视频在线观看| 午夜精品久久久久久久久| 精品9999| 国产精品二区在线| 久久人人97超碰国产公开结果 | 亚洲综合日韩中文字幕v在线| 国产综合自拍| 欧美视频在线观看一区| 久久国产日韩欧美| 一区二区三区精密机械公司| 美女黄色成人网| 亚洲免费视频网站| 亚洲黄色成人| 国模精品一区二区三区| 欧美日韩视频第一区| 久久九九精品| 亚洲专区一区| 在线一区二区三区四区五区| 欧美aaa级| 久久精品亚洲一区二区| 一本大道av伊人久久综合| 影音先锋成人资源站| 国产精品视频免费观看www| 欧美大尺度在线| 久久九九电影| 欧美在线综合| 亚洲一区不卡| 日韩一级黄色片| 亚洲人成啪啪网站| 美女主播一区|