﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-aa19870406-随笔分类-网络编程</title><link>http://www.cppblog.com/aa19870406/category/16153.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 22 Jul 2012 14:31:12 GMT</lastBuildDate><pubDate>Sun, 22 Jul 2012 14:31:12 GMT</pubDate><ttl>60</ttl><item><title>socket accept()返回的socket描述符的端口和listen描述符端口是一样的吗？</title><link>http://www.cppblog.com/aa19870406/archive/2012/07/15/183595.html</link><dc:creator>MrRightLeft</dc:creator><author>MrRightLeft</author><pubDate>Sun, 15 Jul 2012 13:01:00 GMT</pubDate><guid>http://www.cppblog.com/aa19870406/archive/2012/07/15/183595.html</guid><wfw:comment>http://www.cppblog.com/aa19870406/comments/183595.html</wfw:comment><comments>http://www.cppblog.com/aa19870406/archive/2012/07/15/183595.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/aa19870406/comments/commentRss/183595.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aa19870406/services/trackbacks/183595.html</trackback:ping><description><![CDATA[as you know,一个socket是由一个五元组来唯一标示的，即(协议，server_ip, server_port, client_ip, client_port)。只要该五元组中任何一个值不同，则其代表的socket就不同。这里忽略协议的区别，在同一协议的基础上，服务器端的listen socket的端口可以看成(server_ip, server_port, ***, ***),其中***是通配符，它跟任何一个client_ip, client_port值都不同，可以简单看成是（0,0）对，当然实现不是这样的。这样在服务器端accept之后，返回的连接socket的四元组就是(server_ip, server_port, client_ip, client_port)，这里的client_ip，client_port因连接的客户端的不同而不同。所以accept返回的socket和listen socket是不同的，不同之处就在于四元组中的客户端ip和port，而服务器端的server_ip和server_port还是相同的，也就是accpet()函数返回的新的socket描述符的端口和listen端口是一样的。可以使用getsockname()函数来查看它们之间的不同。 <img src ="http://www.cppblog.com/aa19870406/aggbug/183595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aa19870406/" target="_blank">MrRightLeft</a> 2012-07-15 21:01 <a href="http://www.cppblog.com/aa19870406/archive/2012/07/15/183595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>同步io与异步io</title><link>http://www.cppblog.com/aa19870406/archive/2012/07/13/183189.html</link><dc:creator>MrRightLeft</dc:creator><author>MrRightLeft</author><pubDate>Fri, 13 Jul 2012 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/aa19870406/archive/2012/07/13/183189.html</guid><wfw:comment>http://www.cppblog.com/aa19870406/comments/183189.html</wfw:comment><comments>http://www.cppblog.com/aa19870406/archive/2012/07/13/183189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aa19870406/comments/commentRss/183189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aa19870406/services/trackbacks/183189.html</trackback:ping><description><![CDATA[详见《unix网络编程 第1卷：套接口API》 p136<br />阻塞io模型、非阻塞io模型、I/O复用模型和信号驱动I/O模型都是同步io模型，因为其中真正的io操作将阻塞进程。只有异步I/O模型才是异步的<img src ="http://www.cppblog.com/aa19870406/aggbug/183189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aa19870406/" target="_blank">MrRightLeft</a> 2012-07-13 15:45 <a href="http://www.cppblog.com/aa19870406/archive/2012/07/13/183189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SO_REUSEADDR</title><link>http://www.cppblog.com/aa19870406/archive/2012/07/12/183018.html</link><dc:creator>MrRightLeft</dc:creator><author>MrRightLeft</author><pubDate>Thu, 12 Jul 2012 09:16:00 GMT</pubDate><guid>http://www.cppblog.com/aa19870406/archive/2012/07/12/183018.html</guid><wfw:comment>http://www.cppblog.com/aa19870406/comments/183018.html</wfw:comment><comments>http://www.cppblog.com/aa19870406/archive/2012/07/12/183018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aa19870406/comments/commentRss/183018.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aa19870406/services/trackbacks/183018.html</trackback:ping><description><![CDATA[<div style="text-align: center;"><span style="font-size: 24pt; ">SO_REUSEADDR<br /><br /></span></div>编写 TCP/SOCK_STREAM 服务程序时，SO_REUSEADDR到底什么意思？这个套接字选项通知内核，如果端口忙，但TCP状态位于 TIME_WAIT ，可以重用端口。如果端口忙，而TCP状态位于其他状态，重用端口时依旧得到一个错误信息，&nbsp;指明"地址已经使用中"。如果你的服务程序停止后想立即重启，而新套接字依旧使用同一端口，此时SO_REUSEADDR 选项非常有用。必须意识到，此时任何非期望数据到达，都可能导致服务程序反应混乱，不过这只是一种可能，事实上很不可能。&nbsp;<img src ="http://www.cppblog.com/aa19870406/aggbug/183018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aa19870406/" target="_blank">MrRightLeft</a> 2012-07-12 17:16 <a href="http://www.cppblog.com/aa19870406/archive/2012/07/12/183018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>