??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品视频在线观看免费,亚洲青涩在线,欧美第一黄网免费网站http://www.shnenglu.com/Error/category/20178.htmlzh-cnFri, 17 Mar 2017 05:23:20 GMTFri, 17 Mar 2017 05:23:20 GMT60acceptor两种创徏Ҏhttp://www.shnenglu.com/Error/archive/2017/03/16/214758.htmlEnicEnicThu, 16 Mar 2017 13:56:00 GMThttp://www.shnenglu.com/Error/archive/2017/03/16/214758.htmlhttp://www.shnenglu.com/Error/comments/214758.htmlhttp://www.shnenglu.com/Error/archive/2017/03/16/214758.html#Feedback0http://www.shnenglu.com/Error/comments/commentRss/214758.htmlhttp://www.shnenglu.com/Error/services/trackbacks/214758.html2.open bind listen accept完整套\

Enic 2017-03-16 21:56 发表评论
]]>
tcp socket 关闭句柄Q如何保证对端能接收完整数据【测试结果,仅做参考?/title><link>http://www.shnenglu.com/Error/archive/2017/03/16/214757.html</link><dc:creator>Enic</dc:creator><author>Enic</author><pubDate>Thu, 16 Mar 2017 13:54:00 GMT</pubDate><guid>http://www.shnenglu.com/Error/archive/2017/03/16/214757.html</guid><wfw:comment>http://www.shnenglu.com/Error/comments/214757.html</wfw:comment><comments>http://www.shnenglu.com/Error/archive/2017/03/16/214757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Error/comments/commentRss/214757.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Error/services/trackbacks/214757.html</trackback:ping><description><![CDATA[<div>1.直接closeQ客L接收数据不完_本地pȝ关闭socketQ客L收不到完整数?/div><div>2.shutdown_bothQ客L接收数据不完_end of file</div><div>3.shutdown_receive: 客户端接收数据完?/div><div>3.shutdown_send: 客户端接收数据不完整,q程L关闭链接</div><div>关闭socketQ但是确保对端一定收到数据的手段是:</div><div>1.shutdown_receive,同时在应用层认全部数据已经投递到tcp堆栈Q然后调用close</div><div>2.设计应用层关闭协议,由接收方d关闭</div><img src ="http://www.shnenglu.com/Error/aggbug/214757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Error/" target="_blank">Enic</a> 2017-03-16 21:54 <a href="http://www.shnenglu.com/Error/archive/2017/03/16/214757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asio.hpp和windows.h冲突解决http://www.shnenglu.com/Error/archive/2014/02/14/205758.htmlEnicEnicFri, 14 Feb 2014 03:53:00 GMThttp://www.shnenglu.com/Error/archive/2014/02/14/205758.htmlhttp://www.shnenglu.com/Error/comments/205758.htmlhttp://www.shnenglu.com/Error/archive/2014/02/14/205758.html#Feedback0http://www.shnenglu.com/Error/comments/commentRss/205758.htmlhttp://www.shnenglu.com/Error/services/trackbacks/205758.html开始用boost::asio库时Q编译碰到这个错误提C:

fatal error C1189: #error :  WinSock.h has already been included

查了下抛个错误的boost代码Q原来是定义了_WINSOCKAPI_Q但没有定义_WINSOCK2API_

那哪里定义了_WINSOCKAPI_呢?

后来在网上查了下Q原来是我包含了Windows.h头文Ӟ而Windows.h头文件又包含了WinSock.hq个老东?/p>

知道原因q单了Q试了下Q方法有三种可解x错误Q?/p>

1、在包含Windows.h前定义宏WIN32_LEAN_AND_MEANQ就OK了(WIN32_LEAN_AND_MEAN表示不包含一些极用和偏门的资料)

2、在包含Windows.h前包含winsock2.h

3、在包含Windows.h前包含asio.hpp



Enic 2014-02-14 11:53 发表评论
]]>
boost asio timer 单?/title><link>http://www.shnenglu.com/Error/archive/2013/03/08/198303.html</link><dc:creator>Enic</dc:creator><author>Enic</author><pubDate>Fri, 08 Mar 2013 10:04:00 GMT</pubDate><guid>http://www.shnenglu.com/Error/archive/2013/03/08/198303.html</guid><wfw:comment>http://www.shnenglu.com/Error/comments/198303.html</wfw:comment><comments>http://www.shnenglu.com/Error/archive/2013/03/08/198303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Error/comments/commentRss/198303.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Error/services/trackbacks/198303.html</trackback:ping><description><![CDATA[<div>// learn_boost_asio.cpp : 定义控制台应用程序的入口炏V?/div><div>//</div><div></div><div>#include "stdafx.h"</div><div></div><div>#include <iostream></div><div>#include <algorithm></div><div>#include <memory></div><div></div><div>#include <boost/asio.hpp></div><div>#include <boost/timer.hpp></div><div>#include <boost/lambda/lambda.hpp></div><div>#include <boost/function.hpp></div><div>#include <boost/bind.hpp></div><div></div><div></div><div>namespace asio = boost::asio;</div><div>namespace posix_time = boost::posix_time ;</div><div></div><div>// 1.同步定时器?/div><div>void LeanrHowToUseSynchronouslyTimer()</div><div>{</div><div><span style="white-space:pre"> </span>asio::io_service io;</div><div></div><div><span style="white-space:pre"> </span>asio::deadline_timer deadLineTimer(io, posix_time::seconds(3));</div><div></div><div><span style="white-space:pre"> </span>boost::timer timerTestDeadLineTimer;</div><div><span style="white-space:pre"> </span>timerTestDeadLineTimer.restart();</div><div><span style="white-space:pre"> </span>deadLineTimer.wait();</div><div><span style="white-space:pre"> </span>double dTime = timerTestDeadLineTimer.elapsed();</div><div></div><div><span style="white-space:pre"> </span>std::cout << dTime << std::endl;</div><div>}</div><div>////////~</div><div></div><div>// 2.异步定时器?/div><div>class CSomeObject</div><div>{</div><div>public:</div><div><span style="white-space:pre"> </span>CSomeObject(asio::io_service& ioService) :</div><div><span style="white-space:pre"> </span>    m_deadLineTimer(ioService)</div><div><span style="white-space:pre"> </span>{</div><div></div><div><span style="white-space:pre"> </span>}</div><div></div><div>public:</div><div><span style="white-space:pre"> </span>void Test()</div><div><span style="white-space:pre"> </span>{</div><div><span style="white-space:pre"> </span>m_deadLineTimer.expires_from_now(boost::posix_time::seconds(3));</div><div><span style="white-space:pre"> </span>m_timerTestDeadTimer.restart();</div><div><span style="white-space:pre"> </span>m_deadLineTimer.async_wait(</div><div><span style="white-space:pre"> </span>boost::bind(&CSomeObject::TimerHandler, this, asio::placeholders::error));</div><div></div><div><span style="white-space:pre"> </span>}</div><div></div><div>public:</div><div><span style="white-space:pre"> </span>void TimerHandler(const boost::system::error_code&)</div><div><span style="white-space:pre"> </span>{</div><div><span style="white-space:pre"> </span>double dTime = m_timerTestDeadTimer.elapsed();</div><div><span style="white-space:pre"> </span>std::cout << "time passed: " << dTime << std::endl;</div><div><span style="white-space:pre"> </span>}</div><div>private:</div><div><span style="white-space:pre"> </span>boost::timer m_timerTestDeadTimer;</div><div><span style="white-space:pre"> </span>asio::deadline_timer m_deadLineTimer;</div><div>};</div><div></div><div>void LearnHowToUseAsynchronouslyTimer()</div><div>{</div><div><span style="white-space:pre"> </span>asio::io_service ioService;</div><div><span style="white-space:pre"> </span>CSomeObject obj(ioService);</div><div><span style="white-space:pre"> </span>obj.Test();</div><div></div><div><span style="white-space:pre"> </span>asio::io_service::work* pWork = new asio::io_service::work(ioService);</div><div><span style="white-space:pre"> </span>std::auto_ptr<asio::io_service::work> spWork(pWork);</div><div></div><div><span style="white-space:pre"> </span>ioService.run();</div><div><span style="white-space:pre"> </span>//spWork.reset(); // Allow run() to exit. </div><div>}</div><div>//////////////////////////////////////////</div><div></div><div></div><div></div><div>int _tmain(int argc, _TCHAR* argv[])</div><div>{</div><div><span style="white-space:pre"> </span>LearnHowToUseAsynchronouslyTimer();</div><div></div><div><span style="white-space:pre"> </span>return 0;</div><div>}</div><div></div><img src ="http://www.shnenglu.com/Error/aggbug/198303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Error/" target="_blank">Enic</a> 2013-03-08 18:04 <a href="http://www.shnenglu.com/Error/archive/2013/03/08/198303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>4.boost::asio 的handle理解http://www.shnenglu.com/Error/archive/2012/11/08/194942.htmlEnicEnicThu, 08 Nov 2012 11:48:00 GMThttp://www.shnenglu.com/Error/archive/2012/11/08/194942.htmlhttp://www.shnenglu.com/Error/comments/194942.htmlhttp://www.shnenglu.com/Error/archive/2012/11/08/194942.html#Feedback0http://www.shnenglu.com/Error/comments/commentRss/194942.htmlhttp://www.shnenglu.com/Error/services/trackbacks/194942.html在asio的异步指导思想下,所有的socket io操作都被分解了:

投递请??gt; 响应l果

投递请求是异步IO的发起动作,响应l果是异步IO的结果反馈动作?/p>

具体C码就是:asyncpd函数和Functor构成的handler

每一个操作对应一Uhandler

 

具体handler来说主要有两U模型:

一U是接收一个error和translateLenQ这可个详情可以看文?/p>

主要能理解async和handlerQ和选择正确的handler

应该来说Q原则上所有有数据传输的handler有应该选择能接收len的FunctorQ这h制能力更加精?/p>

 

其他的细节有待分析,Q,



Enic 2012-11-08 19:48 发表评论
]]>
3.boost::asio::ip::tcp::resolver的故?/title><link>http://www.shnenglu.com/Error/archive/2012/11/07/194839.html</link><dc:creator>Enic</dc:creator><author>Enic</author><pubDate>Wed, 07 Nov 2012 05:52:00 GMT</pubDate><guid>http://www.shnenglu.com/Error/archive/2012/11/07/194839.html</guid><wfw:comment>http://www.shnenglu.com/Error/comments/194839.html</wfw:comment><comments>http://www.shnenglu.com/Error/archive/2012/11/07/194839.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/Error/comments/commentRss/194839.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Error/services/trackbacks/194839.html</trackback:ping><description><![CDATA[<p>直白点说Q就是对getaddrinfo()q个函数的适配。抽象点说就是解析器?</p><p>l节如下Q?/p> <p>boost::asio::ip::tcp::resolver resolver(asioService);<br />boost::asio::ip::tcp::resolver::query queryEndpoints(boost::asio::ip::host_name(),"80");<br />boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(queryEndpoints);<br />;<br />for(boost::asio::ip::tcp::resolver::iterator iterNull;<br />    endpoint_iterator != iterNull;<br />    endpoint_iterator++)<br />{<br />    std::cout << endpoint_iterator->endpoint() << std::endl;<br />}</p> <p> </p> <p>上面的代码有q么几个cdQ?/p> <p>boost::asio::ip::tcp::resolver</p> <p>boost::asio::ip::tcp::resolver::query</p> <p>boost::asio::ip::tcp::resolver::iterator </p> <p> </p> <p>resolver抽线的是getaddrinfo()动作 </p><p>boost::asio::ip::tcp::resolver::query抽象的是getaddrinfo()需要的参数 </p><p>boost::asio::ip::tcp::resolver::iterator抽象的是getaddrinfo()的结?</p><p>q整个体pL抽象winsock sdk到stl思想 </p><img src ="http://www.shnenglu.com/Error/aggbug/194839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Error/" target="_blank">Enic</a> 2012-11-07 13:52 <a href="http://www.shnenglu.com/Error/archive/2012/11/07/194839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2.boost::asio::io_service::run() q回的问?/title><link>http://www.shnenglu.com/Error/archive/2012/11/07/194828.html</link><dc:creator>Enic</dc:creator><author>Enic</author><pubDate>Wed, 07 Nov 2012 02:27:00 GMT</pubDate><guid>http://www.shnenglu.com/Error/archive/2012/11/07/194828.html</guid><wfw:comment>http://www.shnenglu.com/Error/comments/194828.html</wfw:comment><comments>http://www.shnenglu.com/Error/archive/2012/11/07/194828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Error/comments/commentRss/194828.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Error/services/trackbacks/194828.html</trackback:ping><description><![CDATA[<p>原则上将会在处理完所有的异步h以后q回Q具体内部是某个变量控制的?/p> <p>可以通过Q?/p> <p>boost::asio::io_service io_service; </p> <p>boost::asio::io_service::work work(io_service);</p> <p>work构造以后会让io_service内部的某个控制变量自增这样run׃会返回了?/p> <p> </p> <p>可以通过cMq样的技巧更漂亮的控Ӟ</p> <p>boost::asio::io_service asioService;<br />//boost::asio::io_service::work work(asioService);<br />boost::scoped_ptr<boost::asio::io_service::work> spWork(new boost::asio::io_service::work(asioService));<br />asioService.run();  // q样run׃一直执行不会返?br /><br />...<br />spWork.reset();// reset会导致内部的work析构Q析构以后io_service里边的控刉׃正常。run处理完所有异步请求就会返回了</p><img src ="http://www.shnenglu.com/Error/aggbug/194828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Error/" target="_blank">Enic</a> 2012-11-07 10:27 <a href="http://www.shnenglu.com/Error/archive/2012/11/07/194828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>1.endpoint 一个socket体系中的l端标识http://www.shnenglu.com/Error/archive/2012/11/06/194706.htmlEnicEnicTue, 06 Nov 2012 02:46:00 GMThttp://www.shnenglu.com/Error/archive/2012/11/06/194706.htmlhttp://www.shnenglu.com/Error/comments/194706.htmlhttp://www.shnenglu.com/Error/archive/2012/11/06/194706.html#Feedback0http://www.shnenglu.com/Error/comments/commentRss/194706.htmlhttp://www.shnenglu.com/Error/services/trackbacks/194706.htmlendpoint:描述socket~程体系下的一个端炏V一个IP+PORT ?

portq是一Lunsigned short

提供一个data()ҎQ来q回原生的地址l构体。这是一个好的思\Q这Ll就不会闭了?

 

address: 抽象的一个IP地址Q可以是ipv4、ipv6。对外接口一致。具体实CQ是聚合??两个实体。所以提供is_v4 is_v6q样两个函数来确认类型?br>  address只提供string到address的{换和构造。具体到address_v6 address_v4以后有提供long到address_v4的{换同时也提供了一pd的帮助函敎ͼ
    /// Determine whether the address is a loopback address.
  BOOST_ASIO_DECL bool is_loopback() const;

  /// Determine whether the address is unspecified.
  BOOST_ASIO_DECL bool is_unspecified() const;

  /// Determine whether the address is a class A address.
  BOOST_ASIO_DECL bool is_class_a() const;

  /// Determine whether the address is a class B address.
  BOOST_ASIO_DECL bool is_class_b() const;

  /// Determine whether the address is a class C address.
  BOOST_ASIO_DECL bool is_class_c() const;

  /// Determine whether the address is a multicast address.
  BOOST_ASIO_DECL bool is_multicast() const;
  /// Obtain an address object that represents the loopback address.
  static address_v4 loopback()
  /// Obtain an address object that represents the broadcast address.
  static address_v4 broadcast()



Enic 2012-11-06 10:46 发表评论
]]>
þ99Ʒþþþþò| 99þ99þþþƷ| þҹɫƷ| þþþþþþòҰ߳| ŷһþۺ| 9391ƷۺϾþ㽶 | һþ㽶߿ۿ| þùƷþþ| þþþþþۺۺϺݺ| 츾þþ| պþӰԺ| ޾Ʒþþþsm| þùֻоƷ| ɫۺϾþþþһ| ۺϾþü| ƷۺϾþþþþ98| þþƷƵ| 91Ʒɫ۾þ| ޾ƷƷþ99һ| ݹ97þ÷ѹۿ| ݺɫۺϾþ| AVþþƷɫ| þֹۺ޾Ʒ| þþþƷþþþþ| Ʒҹþ| þþƷҹɫA| ˺ݺۺϾþ| vaþþþͬ| ŷһþþƷ| ޾Ʒþþþþ| þþþĻɫ| ˾ƷۺϾþþ| 91ƷۺϾþĻþһ | ۺϾþþþþ| ھƷþþþav| 18պҹþó| þAV| 㽶þӰԺ| ƷþþþþþþӰԺ| ?VþþƷ| ޾Ʒþþ|