<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[EasyIOCP的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/EasyIOCP</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; EasyIOCP]]></copyright><item><title><![CDATA[类的直接构造和拷贝构造]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7264044</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7264044</guid><author>EasyIOCP</author><pubDate>Thu, 16 Feb 2012 13:03:27 +0800</pubDate><description><![CDATA[先看代码：
#include 
using namespace std;

class A
{
public:

	A(int k): m_k(k)
	{
	}

	A(const A&a): m_k(a.m_k)
	{
	    cout << "copy ctor" << endl;
	}

private:

	int m_k;
};

int main()
{
    A a1(1);]]></description><category></category></item><item><title><![CDATA[模拟C++11的新关键字decltype]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7212819</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7212819</guid><author>EasyIOCP</author><pubDate>Fri, 20 Jan 2012 21:12:41 +0800</pubDate><description><![CDATA[只上代码了，尽在不言中吧：
#include 
#include 
#include 
#include 

using namespace std;

template 
struct decltype_t 
{ 
 typedef T type; 
}; 

#define DECLTYPE(expr) decltype_t::type 


int main()
{
 std::map m]]></description><category></category></item><item><title><![CDATA[完成端口GetQueuedCompletionStatus()返回错误，怎样获得真正的错误代码]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7196710</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7196710</guid><author>EasyIOCP</author><pubDate>Thu, 12 Jan 2012 17:01:18 +0800</pubDate><description><![CDATA[GetQueuedCompletionStatus()返回错误，说明I/O失败。此时调用GetLastError()得到的往往是ERROR_NETNAME_DELETED（64），WSAGetLastError()也一样，这显然不是真正的错误代码，那么怎么得到真正的错误代码呢？
给出下面的代码：
int YourIOCPClass::GetSockError(WSAOVERLAPPED* pW]]></description><category></category></item><item><title><![CDATA[IOCP如何既能发送RST复位连接避免TIME_WAIT状态，又能重用socket？]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7196090</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7196090</guid><author>EasyIOCP</author><pubDate>Thu, 12 Jan 2012 13:49:14 +0800</pubDate><description><![CDATA[待续]]></description><category></category></item><item><title><![CDATA[如何在应用层控制TCP三次握手的过程]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7196083</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7196083</guid><author>EasyIOCP</author><pubDate>Thu, 12 Jan 2012 13:48:12 +0800</pubDate><description><![CDATA[1]]></description><category></category></item><item><title><![CDATA[调用closesocket()背后发生的事]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7195912</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7195912</guid><author>EasyIOCP</author><pubDate>Thu, 12 Jan 2012 13:38:29 +0800</pubDate><description><![CDATA[应用层代码想要关闭一个TCP连接可以直接调用closesocket()，但是这个函数的行为并不“单纯”，只有了解closesocket()背后的故事，才能对关闭TCP连接有正确的认识。
首先明确一点：任何情况下，调用closesocket之后，socket句柄立即失效(一种情况除外，见下文)，再对该socket进行操作的API都会失败。但是socket句柄对应的系统资源不一定立即释放，由内核控制]]></description><category></category></item><item><title><![CDATA[TCP连接的关闭]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7195224</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7195224</guid><author>EasyIOCP</author><pubDate>Thu, 12 Jan 2012 10:46:04 +0800</pubDate><description><![CDATA[这是我自己总结的TCP连接关闭是几种情形，不保证正确性与全面性，假定A端和B端通信：
1、双方四次握手的过程；
2、A端半关闭，经过一段时间，B端数据发送完毕并被A端确认，B端半关闭，A端进入TIME_WAIT状态；
3、A端或B端主动直接RST；
4、保活定时器启动：B端停止响应（路由故障，对方主机崩溃、重启，网线被拔等等），迫使A端保活定时器启动，2个小时（具体由协议栈实现）之后B端仍]]></description><category></category></item><item><title><![CDATA[有符号数的向左位移运算]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7188329</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7188329</guid><author>EasyIOCP</author><pubDate>Mon, 09 Jan 2012 19:43:27 +0800</pubDate><description><![CDATA[今天忽然想到的，有符号数的左移是怎么处理的。
查了一些资料，原来左移就是简单的把数字的2进制表示的最左边若干位抛弃掉，同时把剩余的位向左移动，空出来的位置用0补上即可。有符号数、无符号数都是这样的。
特别的，有符号数左移之后的正负取决于左移之后的符号位，就是说有符号数左移之后的正负是不确定的，和左移的位数有关系。
还有，float和double是不能做位移运算的（这不废话嘛！）。]]></description><category></category></item><item><title><![CDATA[配接器ptr_fun的一点增补]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7186856</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7186856</guid><author>EasyIOCP</author><pubDate>Mon, 09 Jan 2012 12:21:56 +0800</pubDate><description><![CDATA[ptr_fun的作用是什么？就是把函数（函数的参数最多有两个，返回值类型任意，包括void）转成函数对象，并使该函数对象可配接。当和bind1st或者bind2nd结合使用的时候，ptr_fun作用的函数的参数类型会有限制：不能是引用类型]]></description><category></category></item><item><title><![CDATA[无聊的细节：指针、引用、右值]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7177447</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7177447</guid><author>EasyIOCP</author><pubDate>Thu, 05 Jan 2012 10:49:33 +0800</pubDate><description><![CDATA[先看代码：
int i;
int*& ii = &i;

我想定义一个int*的引用ii。但是上面的代码不能编译，因为&i是个右值，不能被引用（只能引用左值嘛），只好加上const：
int i;
int*& ii = &i;
int* const &ii = &i;

OK了，const只能放在这里，下面的代码不能编译（为什么？）：
int i;
const int*& ii =]]></description><category></category></item><item><title><![CDATA[如何把string的元素逆序呢？]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7172434</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7172434</guid><author>EasyIOCP</author><pubDate>Tue, 03 Jan 2012 11:32:12 +0800</pubDate><description><![CDATA[论坛里见到这个问题：如何把string的元素逆序？
我直接想到的是利用反向迭代器reverse_iterator：rbegin()和rend()：
string str1("1234567890");
string str2(str1.rbegin(), str1.rend());

这样的话逆序string就保存在str2里了。要是想保存在原string呢，这样：
string str]]></description><category></category></item><item><title><![CDATA[cin的错误标记和缓冲区清空]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/7167894</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/7167894</guid><author>EasyIOCP</author><pubDate>Sat, 31 Dec 2011 11:03:14 +0800</pubDate><description><![CDATA[先看下面的代码：

vector intVtr;
intVtr.insert(intVtr.end(), istream_iterator(cin), istream_iterator());
上面的代码就是从标准输入中得到int型数字，并把值插入到intVtr中。当遇到非数字字符时，输入结束。
问题是，现在我要继续从标准输入读进int数字并插入intVtr结尾（也可以在其他位置，本文假定]]></description><category></category></item><item><title><![CDATA[IOCP编程注意事项]]></title><link>https://blog.youkuaiyun.com/EasyIOCP/article/details/6364580</link><guid>https://blog.youkuaiyun.com/EasyIOCP/article/details/6364580</guid><author>EasyIOCP</author><pubDate>Tue, 26 Apr 2011 16:16:00 +0800</pubDate><description><![CDATA[虽说我的昵称是EasyIOCP，但是用好IOCP还是不容易的，有很多要注意的地方，长话短说（不涉及细节）：
 
      1、每个连接同时最好只有一个待决的WSARecv。IOCP不保证多个待决WSARecv情况下先投递的WSARecv就一定会先得到完成通知。因此
，多个待决WSARecv可能导致数据乱序，无谓增加代码复杂性。
 
      2、投递0长度缓冲区的WSARecv可以不]]></description><category></category></item></channel></rss>