用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
rstevens的公告
1、记录技术成长历程。 <hr> 2、关注基于 Linux 的,适用于移动终端的软件开发平台及相关技术。 <hr> 3、关注提高性能的技术 <hr> 欢迎各位网友与我讨论交流: <hr> rstevens2008 AT gmail.com <hr> rstevens2008 AT hotmail.com <hr> <a href="http://www3.clustrmaps.com/counter/maps.php?url=http://blog.csdn.net/rstevens" id="clustrMapsLink"><img src="http://www3.clustrmaps.com/counter/index2.php?url=http://blog.csdn.net/rstevens" style="border:0px;" alt="Locations of visitors to this page" title="Locations of visitors to this page" id="clustrMapsImg" onError="this.onError=null; this.src='http://www2.clustrmaps.com/images/clustrmaps-back-soon.jpg'; document.getElementById('clustrMapsLink').href='http://www2.clustrmaps.com'" /> </a> <h3>Google</h3> <script language="javascript"> function search () { var q=document.getElementsByName("q")[0].value; var link="http://www.google.com/custom?domains=" + website + "&sa=Search&sitesearch=" + website + "&ie=UTF-8&oe=UTF-8&hl=zh-CN" + "&q=" + q ; window.open(link); } </script> <script language="javascript"> var website="http://blog.csdn.net/rstevens"; </script> <input type="text" name="q" /> <input type="button" value="Google本站" onclick="javascript:search()"/> <script type="text/javascript" src="http://del.icio.us/feeds/js/tags/rstevens2008?icon=20;size=12-35;color=990000-0000ff"></script> <h3>最近更新</h3> <ul class="list" id="my_last_post"></ul><ul class="list"><li> <script type="text/javascript"><!-- var xmlhttp = false; function load_rss() { xmlhttp = false; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); if (xmlhttp.overrideMimeType) { xmlhttp.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject(" Microsoft.XMLHTTP"); } catch(e) { } } } if(!xmlhttp) { return; } xmlhttp.onreadystatechange = proc_rss; xmlhttp.open('GET', '/rstevens/rss.aspx', true); xmlhttp.send(null); } function proc_rss() { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { var items = xmlhttp.responseXML.getElementsByTagName ('item'); var l = 8; if(items.length < 8) { l = items.length; } var html = ''; for (var i = 0; i < l; i++) { html = html + get_item(items, i); } var obj = document.getElementById('my_last_post'); if(obj) { obj.innerHTML = html; } } } } function get_item(items, id) { var link = items[id].getElementsByTagName('link').item(0).firstChild.nodeValue; var title = items[id].getElementsByTagName('title').item(0).firstChild.nodeValue; var item = '<li ><a href="' + link + '">' + title + '</a></li>'; return item; } load_rss(); //--> </script> <script src="http://club.book.csdn.net/people/javascript/rstevens2.js"></script> <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> <script type="text/javascript"> _uacct = "UA-3778343-1"; urchinTracker(); </script>
文章分类
1. Friendly Link
absurd(RSS)
Brad Abrams
fmddlmyy的专栏
fudan_abc的专栏(RSS)
holub
KangHua 的专栏
Krzysztof Cwalina
一个叫搜索引擎的家伙
云风的博客
刘未鹏的博客
博客园培训团队
周爱民的博客
开源电信-黄思源的博客
手机开发网
苏鹏的博客
许式伟的专栏(RSS)
透明思考 -- 熊节的博客
项立刚的博客(中国通信业知名观察家)
4. Techinique Resource
del.icio.us
developerWorks Linux 专栏
http://www.rapidshare.com/
OSDN
图书下载
英特尔® 软件网络
存档

原创  socket 编程中出现的两个情况及原因分析 收藏

1. Connection reset by peer

如果调用 read() 从 TCP 连接上接收数据并返回 -1,且 errno 为 104(Connection reset by peer);这通常表示对端程序没有关闭 socket 就直接退出了 (例如 core dump );
正常调用 close() 来关闭一个 socket, 会导致关闭连接的两次握手过程,这需要一点网络交互时间;这种情况下, read() 返回的是 0。

 

如果对端程序没有显式调用 close() 来关闭一个 TCP 连接,那么在进程退出前,操作系统会释放相关的资源,包括关闭打开的文件描述符;但是这种情况下的关闭,只是发送一个 RESET 包就立刻结束,因此 read() 返回 -1 且 errno 为 104。

 

因此,在开发过程中,遇到这种现象,可以判断对端程序是不是除了问题。

 

 

2. write() 调用返回 -1 且 errno 为 EAGAIN

当在一个非阻塞的 socket 上调用 write(),可能会出现上述现象。

在非阻塞的 socket 上, write() 操作仅仅把数据送入内核空间的 buffer 就立刻返回;如果 socket 在内核空间中对应的 buffer 已满,就会出现这种现象。

 

有两种处理方式:

第一种比较简单,就是在稍后重新发送数据

第二种是通过 selecet(), poll() 等系统调用,在得到 socket 可写的通知时,再去发送数据

 

 

 

发表于 @ 2008年11月12日 20:39:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:使用 libevent 容易犯的一个错误 | 新一篇:GLIB 常用数据结构介绍 (1)

  • 发表评论
  • 评论内容:
  •  
Copyright © rstevens
Powered by CSDN Blog