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

   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ā)送時

  當(dāng)客戶通過Socket提供的send函數(shù)發(fā)送大的數(shù)據(jù)包時,就可能返回一個EAGAIN的錯誤。該錯誤產(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就會返回EAGAIN的錯誤。

  為了消除該錯誤,有三種方法可以選擇:
  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,因為write沒有設(shè)置O_NDELAY或者O_NONBLOCK

(二)接收時

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

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

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

(三)以下是另一種解釋

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

需要封裝socket_send()的函數(shù)用來處理這種情況,該函數(shù)會盡量將數(shù)據(jù)寫完再返回,返回-1表示出錯。在socket_send()內(nèi)部,當(dāng)寫緩沖已滿(send()返回-1,且errno為EAGAIN),那么會等待后再重試.這種方式并不很完美,在理論上可能會長時間的阻塞在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收到信號時,可以繼續(xù)寫,但這里返回-1.
  12. if(errno == EINTR)
  13. {
  14. return -1;
  15. }
  16. // 當(dāng)socket是非阻塞時,如返回此錯誤,表示寫緩沖隊列已滿,
  17. // 在這里做延時后再重試.
  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>
            欧美一区二区三区四区夜夜大片| 亚洲精品欧洲精品| 亚洲伊人一本大道中文字幕| 亚洲国产欧美在线| 欧美美女视频| 欧美韩日一区| 午夜一区不卡| 欧美成人一区二区三区| 久久婷婷激情| 这里是久久伊人| 夜夜躁日日躁狠狠久久88av| 亚洲一区二区免费视频| 欧美伊人久久| 香蕉视频成人在线观看| 亚洲性视频网址| 性8sex亚洲区入口| 在线播放中文字幕一区| 在线观看日产精品| 99re66热这里只有精品3直播| 在线看日韩av| 亚洲欧洲精品一区二区三区不卡 | 美女成人午夜| 亚洲一区二区成人| 在线观看日韩av电影| 亚洲欧洲日本专区| 欧美夜福利tv在线| 欧美黄污视频| 欧美成人精品1314www| 91久久精品一区二区别| 在线午夜精品| 久久精品成人一区二区三区| 亚洲国产精品视频一区| 亚洲欧美中文在线视频| 牛夜精品久久久久久久99黑人 | 久久精品国产99国产精品| 免费欧美网站| 亚洲天堂成人| 欧美国产大片| 在线日韩日本国产亚洲| 国内精品久久久久久久果冻传媒 | 亚洲国产天堂久久综合| 在线亚洲精品福利网址导航| 亚洲视频在线观看视频| 久久久久**毛片大全| 午夜精品久久久久久久久久久久久 | 亚洲视频综合在线| 一本色道88久久加勒比精品 | 久久噜噜亚洲综合| 亚洲欧美日韩国产一区| 欧美黄色aaaa| 久久久久久尹人网香蕉| 国产精品女主播一区二区三区| 亚洲精品视频在线播放| 日韩视频永久免费| 好看的亚洲午夜视频在线| 亚洲视频碰碰| 欧美成年人视频网站| 一区二区在线看| 久久久五月天| 欧美亚洲日本一区| 国产欧美视频在线观看| 亚洲欧美欧美一区二区三区| 99国产精品国产精品久久| 国产精品福利在线观看| 亚洲视频网在线直播| 亚洲精品一线二线三线无人区| 久久激情综合网| 狠狠色噜噜狠狠色综合久| 久久精品99| 亚洲欧美大片| 欧美伊久线香蕉线新在线| 亚洲少妇自拍| 国产日韩一区二区三区| 久久久蜜桃一区二区人| 久久影音先锋| 亚洲最新中文字幕| 久久久精品五月天| 久久成人免费日本黄色| 在线免费观看日韩欧美| 中文亚洲视频在线| 一本色道久久88亚洲综合88| 欧美三级视频在线播放| 香港成人在线视频| 亚洲国产欧美久久| 亚洲视频1区| 国产视频久久久久久久| 99精品视频免费全部在线| 欧美在线视频导航| 久久另类ts人妖一区二区| 国产精品福利av| 久久精品2019中文字幕| 蜜桃久久av一区| 亚洲影院免费观看| 91久久精品美女高潮| 欧美色区777第一页| 久久激五月天综合精品| 欧美激情二区三区| 中国日韩欧美久久久久久久久| 亚洲日本理论电影| 国产日产欧美a一级在线| 亚洲激情亚洲| 亚洲视频在线一区| 欧美日韩伊人| 久久久国产精品一区| 欧美成人影音| 欧美在线观看一二区| 欧美高清在线视频| 久久久久成人网| 国产精品99久久久久久人| 国产一区二区毛片| 久久免费精品日本久久中文字幕| 99热这里只有成人精品国产| 免费日韩视频| 日韩一级免费| 久久久久久久成人| 国产日韩一区二区三区| 亚洲国产精品成人久久综合一区| 欧美午夜不卡| 亚洲影院高清在线| 99国产精品久久久久久久| 欧美a级一区二区| 国产一区二区三区在线观看网站 | 国内精品久久久久影院色 | 欧美日本韩国一区二区三区| 亚洲欧美第一页| 久久久亚洲人| 国产精品自拍一区| av不卡免费看| 夜夜爽99久久国产综合精品女不卡| 久久精品国产亚洲一区二区三区| 国产主播精品| 亚洲一区二区视频| 亚洲女性裸体视频| 欧美揉bbbbb揉bbbbb| 亚洲精品美女91| 亚洲精品在线免费| 欧美大片一区| 亚洲国产一区视频| 9国产精品视频| 亚洲直播在线一区| 国产午夜精品在线观看| 亚洲午夜视频在线| 亚洲欧美视频一区| 国产精品成人免费视频| 国产精品99久久久久久久女警| 国产精品视频福利| 久久只精品国产| 欧美国产视频在线观看| 欧美激情小视频| 99成人在线| 欧美精品一区二区视频| 亚洲综合日韩在线| 欧美日韩一卡二卡| 一区二区免费在线观看| 亚洲欧美国产日韩中文字幕| 国产精品尤物福利片在线观看| 99热在这里有精品免费| 欧美伊人久久久久久午夜久久久久| 国产精品制服诱惑| 亚洲国产一区二区a毛片| 亚洲精品一区二区在线| 香蕉久久夜色精品国产使用方法| 母乳一区在线观看| 99视频精品全国免费| 亚洲影视九九影院在线观看| 狠狠色2019综合网| 久热精品视频在线观看一区| 午夜久久电影网| 欧美xxxx在线观看| 亚洲人午夜精品| 欧美一区二区成人| 黄色日韩精品| 99精品国产热久久91蜜凸| 国产在线观看精品一区二区三区| 欧美一区二区网站| 亚洲国产一二三| 久久成人精品| 久久综合久久88| 亚洲另类黄色| 在线观看日韩av| 欧美日韩在线观看一区二区三区| 国产乱码精品1区2区3区| 久久久久久久久一区二区| 亚洲一区激情| 国产一区成人| 亚洲午夜成aⅴ人片| 欧美一区二区三区视频| 国内一区二区三区在线视频| 亚洲一区二区视频在线观看| 午夜精品一区二区在线观看| 欧美xx69| 亚洲小说春色综合另类电影| 国产精品第三页| 亚洲电影在线免费观看| 亚洲精品欧洲| 欧美三级不卡| 91久久线看在观草草青青| 亚洲直播在线一区| 亚洲免费电影在线| 亚洲精品视频免费观看|