=================================版权声明=================================
版权声明:原创文章 谢绝转载 啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我
勿用于学术性引用。
勿用于商业出版、商业印刷、商业引用以及其他商业用途。
本文不定期修正完善。
本文链接:http://www.cnblogs.com/wlsandwho/p/5050318.html
耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html
=======================================================================
没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
=======================================================================
BOOST几乎是奇技淫巧的堆砌,来自大神的深深恶意。没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
这个库确实不是给初学者像使用C++标准库那样用的。没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
我觉得在使用前,最好了解下*的那个设计模式。没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
=======================================================================
本文为Boost.Asio下Overview中的内容,我把自己感兴趣的地方进行了摘录、翻译、解释。
=======================================================================
官方文档概述中给的模型,以套接字为例,概要的讲了同步模型和异步模型都做了什么事情,我略作修改。没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
aaarticlea/png;base64,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o0cPd3f3rKws0qEAAKD+0JYbF4b8eQhD/gAgYomJib/99lvnzp0pinrttdcUCsW9e/dIhxK53NxcHx+fjz/+2Nra2sbGZtq0aaGhobipBwBABNCWzQFD/nyAIX8AkA69Xn/lypWFCxd2796doignJ6dFixadOXOmqKiIdDSRYBgmKirKy8tr+PDhFhYWLVq0mDJlir+/f2FhIeloAABgMmjLZoUhf/PDkD8ASNzt27eXLVs2cOBACwuLpk2bDh8+3M3NLTIyUqvVko4mPKmpqTt37pw2bVrbtm0piurates333wTGBhYUlJCOhoAAJge2jIBGPJvbBjyBwCoSKVSHT16dPbs2U5OThRFNWvWbOjQoYsXLz527Bgm16hKYWHh5cuXPTw8Jk6c2KFDB+r/27uf0DiqBw7gW7EK1UPBXpRUIQSqQg+2RaReLPwCElEi9WcRFEXIDyqIJci2HgpqLwWtaA4xGJBKD4UgaEFEm0ahnuo/EP8gaGJPKpalDYvGhZX8DtlsZt782dnt2myTz4deuvtm5r03r9v5zryZKZU2b9788MMPj4+Pu5EHYM2TlleZU/5d5JQ/QEHnz58/ceLEs88+u2vXro0bN5ZKpVtvvXXv3r0vvvjiu++++9NPP/3zzz+rXcfV8ccff5w5c+a11157+umnd+zYce2115ZKpf7+/scee2xsbOzcuXOePwKwfkjLvcIp/w445Q9w+f7666+zZ8+++uqr+/btu/POO5fy4Q033HD33XePjIy88sor77333rfffrv2zjzW6/W5ubnTp0+Pj4+Pjo4ODg4u/VdSKpX6+vruv//+Q4cOnTp16vfff1/tmgKwOqTlXuSUfxan/AH+bbVa7euvv37nnXeef/75wcHB22677ZprrimVShs2bNi6deuePXtGRkZefvnl48ePnz59+vvvv5+fn1/tKrdQq9V++eWXzz777OTJk8eOHXvuueceeOCBbdu2XXfddUvZeMuWLffcc8/IyMjY2Ninn35aqVRWu8oA9ARpudc55e+UP8Dq+vvvv3/44YdTp04dO3Zs//79g4ODt99++6ZNm0rLbrzxxjvuuGPPnj379u175plnDh8+/Prrr584ceLDDz88d+7czz///Ntvv126dKnrFfvzzz8rlcrs7Ow333zzySefTE1NjY+PHzly5MCBA0888cTQ0NBdd93V/L+jVCpt3Lhx69at995775NPPnnkyJGTJ09+8cUXFy9e7HrFAFgbpOWrjFP+TvkD9IiLFy9+9913H3300dtvv/3SSy/t379/796999133/bt22+55Zbrr7++lLBp06abbrqpv79/+/btO3fu3LVr138iHnroof8ue+SRR6Jf7d69e+fOnTt27Ojv77/55ps3b96cXPmGDRu2bNmybdu23bt3P/jgg0899dQLL7wwNjb2/vvvf/7557/++uu6nZkFQGek5aueU/4A9KZqtXr+/Pmvvvrq7NmzH3/88dTU1PHjx998882jR48ePnz44MGD5XL5fxGPP/54My0/+uij0a8OHDhw8ODBQ4cOHT169I033njrrbempqY++OCDM2fOfPnllz/++OOFCxe8HRCA7pKW1yyn/AEAADomLa9fTvkDAABkkZYBAAAgJC0DAABASFoGAACAkLQMAAAAIWkZAAAAQtIyAAAAhKRlAAAACEnLAAAAEJKWAQAAICQtAwAAQEhaBgAAgJC0DAAAACFpGQAAAELSMgAAAISkZQAAAAhJywAAABCSlgEAACAkLQMAAEBIWgYAAICQtAwAAAAhaRkAAABC0jIAAACEpGUAAAAIScsAAAAQkpYBAAAgJC0DAABASFoGAACAkLQMAAAAIWkZAAAAQtIyAAAAhKRlAAAACEnLAAAAEJKWAQAAICQtAwAAQEhaBgAAgJC0DAAAACFpGQAAAELSMgAAAISkZQAAAAhJywAAABCSlgEAACAkLQMAAEBIWgYAAICQtAwAAAAhaRkAAABC0jIAAACEpGUAAAAIScsAAAAQkpYBAAAgJC0DAABASFoGAACAkLQMAAAAIWkZAAAAQtIyAADdURsdqIzOrHYtrj610YHK0GS9o2/XvCvS/LmFofaGrqF++f6lPuzugJGWAQDojisfIeoTw5W+ci33k9633tJyW/torabldgfqSvnpcqVvIPqnOh0pF/l2fmIu9fM2llpqaeOr4YXZ1FqFi4Sby+goaRkAgHUk9/B3phocoKd80q5kyGk79vSCdZaW29tHazQtt7vFSPnpcmpwDb+anZyP5tiOlqpPDDf/hdYnhqNriKToMC3HS85UMwJzmz8XRUnLAAD0oiudlmcn54MAkPzkarC+0nKb+2htpuV2B2q0fGbuDVtRnxhe6brOlgrrkPwHO1NNvRwdWWHWHpSWAQBYR5YOf5cmZ1b6BpoTTSOfNK5EJT9ZbB7mzk7Op8zhnFsYCg+Ck4fFzU+Cr1L+OjrTrTJpPTFTbTahUb6RSZKd06rhiWZGiyUTRWxK7Uw8CK3UKjuHJGveYqPhTh+arMf2eDjZuK19lPg8tQlzC0MDic3ldXjQUZXRyWZHtVGrnJXn76P4avP3fko1snJvMs1GS3a2VH7JxcXUtByfZJ55JqL4z0VK4exhJi0DANCLliZnLh86z1T7wpyTf225MbezuchSfmgcZyfTcvIwPfJJ7Ih/KWI1/zq3MDRQne5emcB0OTY3dXZyYXqxmehinbMcIVIb3lxDIilFNpqYNxv9trHaxlZi3VWbSIsT6TVvsdHYTm9GvshG40mpzX0Ua356E+oT5ehSsdMTGR0etCjWUcVrlTXUc7srZV/kDfuU8sEdyPENZU+16GypFVmhNyUtL3f+8ML05HxfZnZt6+ei+DCTlgEA6EXBcWr8ElPBtFz4kV3T5bSrhWmbmy5X+obnh6KH2kthoFtlorJCRZj2o03Lb3hWXEyUTH4bqUz6hcEiNW9x8TDl6mvOhb6291FkDa2bEF1/TofndlS7tWq98sQwjg/d1sM+OdRjJWO1TeTelB5rZ6mV6/Ypj/LKaO/yaltMZGjr56L4MJOWAQDoRcHM5E7ScnCYW/hmy+QnzcrUJ4YbczibszejB9bdKLMiM9Gl3R2aETiDhreIi82SKd9GN7oce7KCRFbN8zfa6ibVeC91uo/il4uTTYg+cSqWllM7vEVHtTcqCqw8GMZpnZA37FvcU72yeHruTb87uoOlgpkLy7LODsQeG1bkKV+t03KxYSYtAwDQi65cWk5mksQnywfQy7NnZyfn+8q1xcXaaHzqcjfK5FWsYdXT8kr10jPzFUjLHe2jzNu2I9fbV4ZZcG25o7RctFadpeVEgRbDvtUV9ZUeLn4HcqdLpd2on35DRJEVSssAAKwjXUjL8RmnWQe+yeu6KVd6ly6RTTeizvJNpzPV6IF7t8rEG5U2Z7VVWs5u+GXMxM54eU9wY22LmheYiV0sxnS2j9LHQLMJ8SQWqVhOh7fqqIK1KrryWHclOyF/72c+oTpaODJ9ILrpnGUve6mmRHsLx29pGQCAdaTl4W/Os44Ww6dSBaEuehtq61U1F6mOluPXDIfnY0fSXSkTy1rhhNXpcrX5lK+8tJz7DKpodoqvPPG0qsQbcZfvW66mvHq3SM0LbLRQjOlwH0Uvrac0IVqZxmXnlmk5t6OK1ypj5bndlfG+pcy9n1o+ODsQCaLZF6U7WmqmGonxhWdiL02Yjz8TOzoRIDHjPdmH6T8O0jIAAFev3MPflQf/JJ/uG32DVC3y/pjwLUFZd1pmXLwKj+9Tnk7clTKJCc+xtxPNpJZJzsTOaHjqg7Ka9+iGrY7ewVudTtyOGy5VpOYtNlo0xnS6j8LL7Ik6xN4qVGQmdquOKlqrAkM97K60Tsjb++mdFnnLV+LpX/WMUdThUrFXYSUfRTYQ/xNPyCkDKf3+8Pw+jL5BKug0aRkAgPWi4GFucjpo2gRRFls+IOpKso8WMzohZ9jrtFUnLQMA0BMKpeUCz/eioXd6pndqsooyOiFz2Ou0HiAtAwDQE7o7hXIdqk8MR2YLz1Rz3hdFzzDse5m0DABATxAbLl/szcMm8V4NDPteJi0DAABASFoGAACAkLQMAAAAIWkZAAAAQtIyAAAAhKRlAAAACEnLAAAAEJKWAQAAICQtAwAAQEhaBgAAgJC0DAAAACFpGQAAAELSMgAAAISkZQAAAAhJywAAABCSlgEAACAkLQMAAEBIWgYAAIDQ/wFMz372kldGWAAAAABJRU5ErkJggg==" alt="" />
=======================================================================
知识储备:Proactor和Reactor没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
两种高性能I/O设计模式(Reactor/Proactor)的比较
=======================================================================
Boost.Asio支持异步操作(通过Proactor模式)和同步操作。没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
Proactor模式可以不使用多线程来实现并发。
aaarticlea/png;base64,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nhBCKisrW7ZsmZiY6ObmVl5erv2n8vLysrIyQ5alVqv181NFRcXt27eZ/zL5/vbt2xqNRmdkZnKNRpOXl8easUpLS3Um5BlZn+GrQ5DveZkl369bt87Ly6uoqEh7iKOjI3PM8Oxc7a6lSktL9UeQy+XMW1f1871cLq+trWX+O3369MmTJ+vPpEmHooGQ7wEAACwK+Z4QQrZv3x4cHFxdXe3l5fXNN9/QA+VyeWxsbNu2baVSaf/+/e/du/fdd9+1adNGqVTSI7z55pujR4/Oycnx8PBYt25dq1atJBJJdHT0/fv3CSEqlWr69Okymczd3f3JJ588ceIEISQyMnLatGnBwcEymax169b0wM8//3z48OHjxo3z8vIihOzfv79169Z+fn4ymeydd96hu9/u1avXsmXLwsLCnJycfHx8jh07RpeBdeRu3brt2LGDHmHLli19+/ZlXZ1GNwvyPQ+z5PuIiIh58+ZpD1Gr1Xv27Llz5w7hPhISExPDw8MdHR2joqJSU1P9/PwkEknXrl3pbwVz5swZP3583759PTw83NzcNm/eTBrm+3PnznXu3NnV1dXLy2vhwoUajWbJkiVSqVQqlcbFxeXm5np6etLfcpt0KDZh01lfvr9582ZsbGxBQYFQBQAAADAj5HtCCImJiVm0aBEh5PXXX4+JiaEHrlixYsSIERqN5vbt288999zq1asVCkWLFi3oFtIqlcrHx2f37t05OTkURY0YMUKhUJw5c8bPzy8lJYUQsmHDhnbt2t24caOqqio+Pr5nz56EkMjIyI4dO549e1Yulw8dOnTw4MGEkNWrV8tksrfeeuvixYuFhYWurq779u0jhBQVFQUHB69du5aesEOHDllZWaWlpbGxsXFxcYQQrpE7derEtAL68ssv+/Tpw7o6jW4W5Hsepud7tVotk8m+//571r/yHAmhoaGZmZm5ublt27b18fE5f/68XC4PCgpKTk4mhCQkJEgkEvooTU1Nlclk//zzD5Pvy8vL/f39Fy1aVFFRkZ+fHxwcvGnTJqJVf08fz+Xl5U06FJu26aws31dUVPTo0SM8PNyQL70AAADWD/me5OfnSySSq1evEkJ+//13iURSWFhICFm1alX79u1//fXXiooKlUpFV9uPHTuWjkHp6ene3t41NTV0HsrLy6PnNmTIkAULFhBCevfuTf+DEHL37l069EdGRjKtq1NSUsLCwgghq1evDggIoBtLrFq1qkOHDkzZ5s+f/+yzz9ITrly5kh64c+dOekKukVnzPevq8EO+52F6vq+urpZIJLt372b9K8+R8PHHH9MDY2JiJk2aRP97zJgx7777LiEkISGBHpPWq1evlStXMvl++/btPj4+crlcoVAoFIr58+cPHDiQsOX7Jh2KTWJV+b62tnbw4MG+vr45OTnNv3QAAABLQL4ny5Ytc3Bw8PX19fX19fb2pihqxYoVhJCamprExMR27do5Ozu/8MILdIJPS0vz8fFRqVRvvPHGW2+9ReryENNAecyYMYmJiYQQPz+/7du36ywrMjLy22+/pf/9008/BQUFEUJWr179/PPP0wPj4+NHjhzJjL958+bw8HCdCVNTU+kJuUbWzvfJycl0vmddHX7I9zzM0j4nODg4Pj5ee4hGo1m6dGl2drYhR8KgQYOYr4tjx46dPn06ISQhIWHKlCnMhK+++uqcOXOYfL906VJnZ+f2WgYNGkTY8n2TDsUmsap8/8477zg7Ox8/frz5Fw0AAGAhyPckJCTkww8/vFbn7bff7tKlCyEkKyuLboV88V/2rfcAACAASURBVOLFAQMGvP7664QQtVrt5+eXlpbm6+tLZwI6DzH9CTL5vnPnzosXL6YHFhYWrlu3jjTsP4c13y9evLhr165M2aZNm0b/SXtCJlRxjfz4449v3bqVHjhz5kw637OuDj/kex5myfcjRowICQnRHnL48GFfX9+qqipDjgSufE+3+6IFBARs2rSJyfcbN2709/dnnostKSnJzc0lbPm+SYdik1hPvl++fLlEIsFBDgAAImPt+V6tVv/22290gxkjNJrvMzIypFKpdhc3586doyjqr7/+eu211+bOnUv3QDJ37tyJEyfSIyQkJHTq1ImJZVz5fsGCBZ07d7569apSqZwwYcKMGTOIAfn+zJkzEolk7969hJDS0tKgoKCvv/6acIQqrpGHDBkybNgwhUJRWFjYrl07Ot9zrQ4P5HseZsn3eXl57u7uM2bMoDs1+uuvv0JCQt5//31i2JHAle89PDwuX75MCNm5c6ezs3N2djaT73Nzc11cXFJSUjQaTX5+fo8ePZKSkggh7733Hl14Jt836VBs2qazjny/adMmiqI2bNjQnAsFAABoBtae7zUaTatWregH+4zQaL6fNGnSSy+9pDMwNDR05syZ58+f9/X19fPz69y5c69evS5dukT/9cyZMxRFffjhh/R/ufK9QqGIi4uTSqV+fn4xMTE3b94kBuR7QsjKlSulUmlISEjLli3ffPNNOpFzhSrWkY8cOeLu7t6yZcuIiIj4+Hg633OtDg/kex7mer/VoUOHQkJCKIry8PBwdHScMWNGVVUV/adGjwSufB8dHR0YGBgYGNimTRv6DdDa/efs2LGjRYsWgYGBMpls4sSJNTU1hJD09HRPT8/hw4cz+d6QAthuvj906JBEIlmyZEmzLREAAKDZWHu+J4TExsYOGzbMuGkNf78VK4VCcfbsWZ1e827duuXk5HTr1i1D5lBcXMzaNzk/uVx++vTpu3fvGj2yUqnMz8/XGZN1dXgg3/MwV74nhGg0mtzc3MzMTCbZM5p0JNDo9ve1tbWXL1+me7TUR/f1pHMkVFVVKRQK0wvQKGvI95WVlXTHQQAAAOJjA/n+k08+8fPzM25aE/O9vnPnzk2ZMmX8+PFmnKfVQr7nYcZ8b146z9daIWvI9wAAACJmA/n+zz//pCjqypUrRkxr9nz/3HPPxcfHG1h5b+uQ73lYbb5fvXo13aTeaiHfAwAAWJQN5HulUunq6ko/29dUZs/3dgX5nofV5nvrh3wPAABgUbaRff/zn/9MmDDBiAmR702BfM8D+d5oyPcAAAAWZRvZd9GiRR07djRiQuR7UyDf80C+NxryPQAAgEXZRvY9ePAgRVFFRUVNndC8+f7u3bsffvjh4MGD+/btO3369IMHD5przjwOHjy4cePGZliQPuR7Hsbl+3379iXo+eOPPyxaVEGOWx7NnO9TUlKYN80BAADYA9vI9wqF4oMPPigpKWnqhGbM91evXg0NDe3Spcsnn3zy1VdfTZo0ydHR8YMPPjDLzPV16tTp8OHDhJCUlJSZM2daaCn8kO95GJfv582bFxAQMKWh9PR008tz4sSJ4OBg/eH0cduzZ8+VK1c2w3FriObM92vXrnVwcJg9e7bZ5wwAAGC1bCPfG82M+b5Pnz4xMTHMe6wIIT/88ANFUUePHtUeTftVuDSNRsPaBX5VVRXT33ltba3OOG3btj1w4ID+VNXV1Xl5ebW1tTrD1Wo1/fYiM0K+52F0vo+JiWnSgriOH0JIaWmpRqOh/52RkdGyZUv9cfr06RMXF0e/morGetyyksvl+kdaUwupr9ny/fvvv09R1IoVK8w7WwAAACuHfG8Q+p21mZmZOsOfeuop+sHf8PDwhQsXBgUFubq6hoeHX7hwgR5h/fr1np6ebm5uHTt2PHToECGkqKjIyclpy5Yt3t7eaWlphJC5c+f6+vr6+vqGhYXt27ePENK1a1cHBwcXF5etW7d++umnQ4cOJYSo1eqZM2e6uLi0bt26devWv/zyCyEkJyfHw8Nj3bp1rVq1kkgk0dHR9+/fN319acj3PMyb759//vn4+Hj632q1un379j/++CNhO34IIb169Vq2bFlYWJiTk5OPj8+xY8cuXrzo4uJCUZSbm5v2AUAft1lZWTqLY47bbt267dixgx64ZcuWvn370v8+d+5c586dXV1dvby8Fi5cSH+L4BqZtZB8m87y+V6tVk+dOtXR0dG4frcAAABsGvK9QbZu3ers7MzUlTLeeeedqKgoQkhAQEBYWFhxcXF1dfXkyZO7du2q0WjS0tI8PDwOHTqk0Wh+/vlnJyen4uLiwsJCiqKio6MPHDhQVVV15cqV4ODg3NxcQsjXX3/96KOP0kth6u+TkpIGDRpECNm4cWNwcDDd9f7u3bvd3NyuXbuWk5NDUdSIESPoN5L6+fmlpKSYvr405HseRuf7jh07Lm1Io9F8/fXXbdu2pSvLDx065OXlVVVVxXr8EEIiIyM7dOiQlZVVWloaGxsbFxdHOOrvt27d6uLiwnPcdurUadu2bfTAL7/8sk+fPoSQ8vJyf3//RYsWVVRU5OfnBwcH0696ZR2Zq5B8m87C+V6hULz00ktubm579uwxywwBAABsC/K9QdasWePv768/fOrUqXTKCQgI2LBhAz0wPz+foqi8vLzBgwdPmDBBUSciIuKrr76i831GRgY9slwuLywsVKlUubm5n376KUVRSqWSsOX73r17azcjfvTRR5OTk+l8n5eXRw8cMmTIggULTF9fGvI9D6Pzvb+//+sN1dbW3r9/39XV9X//+x8hZMqUKW+99RYhhPX4IYRERkauXLmSnuHOnTvDwsIIR77nOm4TExN79epFOCL79u3bfXx85HI5vdz58+cPHDiQa2SuQvJtOkvm+5KSkp49e7Zu3frkyZOmzw0AAMAWId8bZO/evRKJhGkuz+jQocPYsWMJIQEBAb///js9UKlUSiSSs2fPdunSxcvLq72W9evX0/meaSt/69at119/3dPTs0uXLkOHDuXJ935+fj///DOz6P79+7///vt0vq+srKQHjhkzJjEx0fT1pSHf8zB7+/sxY8ZMnz5dqVR6e3ufOnWKEMJ6/BBCIiMjv/32W3qq1NTUoKAgwpHvuY7buLi40aNHk4aRPTk5mY7sS5cudXZ21l4ufQSyjsxVSL5NZ8l8f+bMmSeeeCInJ8f0WQEAANgo5HuD3L59283NTaefyitXrlAURWfugICA7du308OPHz9OUdS9e/diYmKmT5/OjJ+dnX3v3j2dfD937tw+ffooFApCyLlz53jyfefOnZcvX87MrXXr1ps3b6bzPfPUL/J9szF7vj9w4EC7du327dvXqVMnegjr8UMIiYyMZHI2f74vKSnRPm5LSkoWLFjwzz//SKXSI0eOEEIef/zxrVu30n+dOXMmHdk3btzo7+/PtOopKSmh24+xjsxVSB6Wbp+j3x4JAADAriDfG+r999/38PD47rvv6DB9+fLlrl279u3blw4TAQEB/fr1UyqV5eXl48aNoxs/rF27NjAwMDs7mxCSnp7u4uLy77//6uT70aNHv/HGG4QQlUo1fvx4iqJqamoIIYGBgXQGYvL9nDlzunTpcuXKFUJIWlqam5tbSUkJ8r1QjM73UVFROQ3dvXuXEKJWq/39/Tt16sT098J6/BCOfH/y5EkXFxf9qvr58+e3bNkyJSWlurq6tLQ0KirK1dU1NjaW/uuQIUOGDRumUCgKCwvbtWtHR/bc3FwXF5eUlBSNRpOfn9+jR4+kpCSukbkKybfp8H4rAAAAS7K9fE9XbxvIjPleo9F89tlnbm5ujo6Onp6eMpls0qRJTJwKCAh45ZVXfH19vb29u3XrRvdYolKpJk6c6ODg8Mgjj3h7e9N1nzr5/tSpU+3btw8LC/P3909OTg4ODqZ7y5kxY4arq+v27duZfP/gwYNBgwZJJJLOnTt7eXn99NNPhBDke6EYne8pPcwuS0xMdHR0pB+hJhzHD+HI91VVVWFhYZ6eng8ePNBeokajWbVqlaurq6OjY9u2bWUyWXR0dNu2ben6+yNHjri7u7ds2TIiIiI+Pp6O7ISQHTt2tGjRIjAwUCaTTZw4kf7OyToyVyH5Nh3yPQAAgCXZWL5PS0vz9vauqKgwcHzzvr+WEKJWqy9dunT27FntjvAJIQEBAenp6eXl5deuXdOZ5ObNm6dPn9ZJXdpqa2uzsrLoHspramqY13jJ5XLtbstpeXl5mZmZOku3EOR7HsbleyM0evxoo38K0Ecft8ePH79z5w4hZN++fcyzHEqlMj8/X38SukemgoIC7YFcIzepkMj3AAAAFmVj+f727duOjo4//PCDgeObPd9zofN9MyyoOSHf82i2fC8+5sr3+o2RAAAAgNhcvieExMTEDBs2zMCRmy3fx8bG0n2eiAnyPQ/ke6OZJd9v27bN39//+vXrFikiAACALbO9fL9p0yY3Nze6w5lGNVu+FyXkex7I90YzMd8rlcq3336boqhZs2ap1WpLlhQAAMAm2V72vX37tlQq3blzpyEjI9+bAvmeB/K90UzJ90VFRVFRUe7u7jgyAQAAuNhk9n3ppZdeeOEFQ8ZEvjcF8j0P5HujGZ3vDx482Lp16/Dw8EuXLlm+mAAAALbKJrPv999/7+joWFzceG0f8r0pkO95IN8bzYh8X1tbu2TJEolEMnLkyPLy8uYqKQAAgE2yyexbVVXVsmXLzz77rNExke9NgXzPA/neaEbk+z179jg5Oa1fv765yggAAGDDbDX7Llu2zJAm+Mj3pkC+54F8bzTj2udcvXq1WUoHAABg80SefZHvTYF8zwP53mh4vxUAAIBFiTz7It+bAvmeB/K90ZDvAQAALErk2ZfO92A05HsurPle6N1lM5DvAQAALEfk+b6goGCXtZoxYwYddKxZQUGB0PvQSukH0xMnTgi9u2wGc1zpbMbq6mpD+sUCAAAAHiLP99ZsF9oO2TJUPJuFzmbs0qXLwIEDhS4UAACAbUO+FAzyvU3TCab4mOUTHR19/fp1ofctAACAbUO+FAzyvU0TPAqL8qNWq4XesQAAADZPDPmyuLj41KlTQpeiyZDvbZrgUViUH6H3KgAAgBiIIV9OnTq1Y8eOSqVS6II0DfK9TRM8CovyI/ReBQAAEAMx5Mu8vDwnJ6dNmzYJXZCmQb63aYJHYVF+hN6rAAAAYiCSfDlt2rT27dtXV1cLXZAmQL4HAAAAALMTSb4sKipycXFZs2aN0AVpAuR7AAAAADA78eTL2bNn+/j4lJWVCV0QQyHfAwAAAIDZiSdfyuVyHx+fOXPmCF0QQyHfgz2Qy+VXr14VuhQAAAB2RFT5cs2aNS4uLvn5+UIXxCDI9yButbW1mzZt8vX1feGFF4QuCwAAgB0RVb6sqamJjIzcv3+/0AUxCPI9iNixY8e6d+8ulUrfffddG2o1BwAAIAJiy5cajUboIhgK+R5EKScnZ9iwYRRF9e/fPysrS+jiAAAA2B3kS8Eg34PI3L17NyEhQSaTRURE7Nu3T+jiAAAA2CnkS8Eg34PI/Prrr35+fhs3blSr1UKXBQAAwH4hXwoG+R7Ep6KiQugiAAAA2DvkS8Eg3wMAAACA2SFfCgb5HgAAAADMDvlSMMj3YHMKCwtnz579xhtvCF0QAAAA4CTyfLlp06bFixcLXQp2yPdgQ/7666/x48fLZDJ/f/9PPvlE6OIAAAAAJ5Hny02bNjk6Op44cULogrBAvgfrp1Qqv/vuu6effpqiqC5dumzdurWmpkboQgEAAAAf8efLAQMGhIeHV1VVCV0QXcj3YOU2bNjg5+fn6Og4ZMiQgwcPCl0cAAAAMIj482VBQYGnp+d7770ndEF0Id+DlduyZcvChQsLCgqELggAAAA0gV3ky61btzo4OFhbBSTyPQAAAACYnb3kyxEjRvj7+9+5c0fogtRDvgfB1dbWXrhwQehSAAAAgDnZS76Uy+VBQUEvv/yy0AWph3wPQqmurt6/f/+UKVPatGnj6Oh49+5doUsEAAAAZmNH+fLo0aOtWrW6cuWK0AV5CPkemtnVq1fXrVsXGxvbokULBweHJ598cvny5VlZWUKXCwAAAMzJvvLl/fv3hS5CPeR7aE7jx4+nKKply5ZDhgzZtGlTYWGh0CUCAAAAi0C+FAzyPTSnjIyMjIwMlUoldEEAAADAspAvBYN8D2ZRWVl5+vTpL7/88u23396wYYPQxQEAAACBIV8KBvkejFNcXLxly5bZs2e//PLLjz76qKOjI0VRLVq0eOqpp9auXSt06QAAAEBgyJeCQb4HVhqN5u7duzdu3OAaISMjw9XVtVu3bqNGjVq8ePGPP/545cqV2tra5iwkAAAAWC3kS8Eg34ubRqOprq6+f/9+aWkp1zi3bt2aNWvW5MmTX3311WefffaJJ55o27atVCqlKKpr165cU9XW1mo0GsuUGgAAAGyevefLkydPXr58WZBFI983j+rq6jt37ly7du2vv/46fvz4wYMHd+/evXfvXq7x7969O2HChLFjx44YMeLVV1+Ni4t78cUXBwwYEBMTM2rUKK6pioqKAgICWrdu7eXl1aJFC5lMRtUJDg7mmur69etPPvnkgAEDRo4c+dZbb82fP3/NmjU7d+48dOiQUIclAAAA2Dp7z5f9+/d/5JFHBOkrEPneREqlMi8v7/z581wj3Lx508nJiWITFBTENdWdO3defPHFwYMHDx06dNSoUePGjZs4ceLkyZPffPPNhQsXck1VXl6+Zs2a9evXb9q0aevWrTt27Pjxxx/37t37+++/nzhxwsQ1BQAAADCcvefLe/fuderU6fHHH5fL5c28aOR7w9XU1Hz77bfLly+fNm1aXFxcjx49/Pz8HBwcKIry9fXlmSolJWXPnj2HDx8+e/ZsdnZ2YWGhXC6vqalpzsIDAAAANCfkS3Ljxo3AwMDevXs/ePCAGfjBBx+cPXvWEotbuHAha40yRVEff/yxJZYoAiqVyt3dvWPHjn379h09enRiYuKaNWt++umnEydO4D1NAAAAANqQ7wkhJDs7u23bts8880xFRQUh5IMPPqAoaurUqZZY1qlTp1jDvUwmKykpscQSrVZNTU1mZubWrVvffffd//znP76+vvT2BwAAAACjId8/9M8//3Ts2PGvv/6iwz1FUe7u7uXl5WZfkEaj8fPz08/3w4cPN/uyrNMXX3wxbty4Ll260A+huri49OzZc/LkyZ9//rlCoRC6dAAAAAC2Dfm+nkqlYsI9bdOmTZZY0KRJk/Tz/aFDhyyxLCs0atSoQYMGzZkzZ+fOnZcuXVKr1UKXCAAAAEA8kO/r6YR7iqJ69OhhiQWlpqbqLCgkJERMPZpfuHChoKBA6FIAAAAA2CPk+4f0wz3NEk/ZKhQKZ2dnG3qytrKy8ttvv+Ufp7Cw8Jtvvhk7dizd+igpKal5ygYAAAAA2pDvCSHku+++Yw33lMWesh00aBCzCCt/svbYsWNhYWFSqVT/Pazl5eV79+595513IiIiKIpydnaOiYn56KOPzp49W1tbK0hpAQAAAOwc8v1DqampYWFh+vneQk/ZJicnM4uw2idrKysr33vvPYlEQpfzq6++0hnhwIEDDg4O3bp1S0xM/P333ysrKwUpJwAAAAAwkO/rKZXKzz//3NfXVyfiW+Ip2/z8fGb+Bw8eNPv8TUdX22tvh4EDB+qMo1Qqb9++LUjxAAAAAIAV8r2usrKy2bNna7ePt9BTtl27drXOJ2t1qu0ZrE10AAAAAMCqIN+zy8vLGz16tIODg+Wesl2wYIEVPll77NixRx99lOtpBP0mOgAAAABgVZDv+Zw+ffqZZ56x0FO2J0+etKonaysrK2fMmKFfbc/fRAcAAAAArIqd5vuCgoJdBps1a1bHjh23bdtm+CSG+OGHHwYNGmTeeRrtl19+4am2RxMdAAAAAFthp/l+165djWZZuzJz5kwDvwkUFxcLvfcAAAAAgJNd53uhS2EtKIratWuX0KUAAAAAADOw04yLfK8N+R4AAABANOw04yLfa0O+BwAAABANO824yPfakO8BAAAARMNOMy7yvTbkewAAAADRsNOMi3yvDfkeAAAAQDTsNOMi32tDvgcAAAAQDTvNuMj32pDvAQAAAETDTjMu8r025HsAAAAA0bDTjIt8rw35HgAAAEA07DTjGpjvNRrN5s2bR40a1bt375EjR6alpVmiMGVlZQkJCZWVlY2OeefOnYSEhOrqavMWAPkeAAAAQDSQ7zkplcrY2Ng2bdosX778m2++GT9+fIsWLT766COzF6awsJCiKLlczjXCvHnzEhIS6DGffvppQ74JNAnyPQAAAIBoIN9zWrdunZeXV1FRkfYQR0fH27dv0//VaDR5eXmsafvBgwfMv0tLS/VHkMvlKpWK/rd+vpfL5bW1tcx/p0+fPnnyZP2Z8BSgtLRUo9HwryAD+R4AAABANJDvOUVERMybN097iFqt3rNnz507dwgh+/fvb926tZ+fn0wme+edd9RqNSGkV69eiYmJ4eHhjo6OUVFRqampfn5+Eomka9eu9LeCOXPmjB8/vm/fvh4eHm5ubps3byYN8/25c+c6d+7s6urq5eW1cOFCjUazZMkSqVQqlUrj4uJyc3M9PT3Ly8t5CrBs2bKwsDAnJycfH59jx44ZsjWQ7wEAAABEA/menVqtlslk33//PetfCwsLXV1d9+3bRwgpKioKDg5eu3YtISQyMjI0NDQzMzM3N7dt27Y+Pj7nz5+Xy+VBQUHJycmEkISEBIlEQrfjT01Nlclk//zzD5Pvy8vL/f39Fy1aVFFRkZ+fHxwcvGnTJqJVf5+Tk0NRVHl5OU8BOnTokJWVVVpaGhsbGxcXZ8jWQL4HAAAAEA3ke3bV1dUSiWT37t2sf121alWHDh2Y/86fP//ZZ58lhERGRn788cf0wJiYmEmTJtH/HjNmzLvvvksISUhIoMek9erVa+XKlUy+3759u4+Pj1wuVygUCoVi/vz5AwcOJGz5nqcAK1eupAfu3LkzLCzMkK2BfA8AAAAgGsj3nIKDg+Pj47WHaDSapUuXZmdnx8fHjxw5khm+efPm8PBwQkhkZOS3335LDxw0aBDzMO7YsWOnT59OCElISJgyZQoz4auvvjpnzhwm3y9dutTZ2bm9lkGDBhG2fG9IAVJTU4OCggzZGsj3AAAAAKKBfM9pxIgRISEh2kMOHz7s6+tbVVW1ePHirl27MsOnTZv2/PPPE0IiIyO3bdtGD+TK94MHD2YmDAgI2LRpE5PvN27c6O/vzzwXW1JSkpubS9jyvSEFQL4HAAAAsEPI95zy8vLc3d1nzJhRVlZGCPnrr79CQkLef/99QsiZM2ckEsnevXsJIaWlpUFBQV9//TUxLN97eHhcvnyZELJz505nZ+fs7Gwm3+fm5rq4uKSkpGg0mvz8/B49eiQlJRFC3nvvveHDhxOtfG9IAZDvAQAAAOwQ8j2fQ4cOhYSEUBTl4eHh6Og4Y8aMqqoq+k8rV66USqUhISEtW7Z888036c4uDcn30dHRgYGBgYGBbdq0+fLLL0nD/nN27NjRokWLwMBAmUw2ceLEmpoaQkh6erqnp+fw4cOZfG9IAZDvAQAAAOwQ8n0jNBpNbm5uZmYmk+wZcrn89OnTd+/eNXy5dPv72tray5cv0z1a6lMoFGfOnCkoKNAeWFVVpVAoTC8AK+R7AAAAANFAvm9WOs/XWgnkewAAAADRQL5vVqtXr6ab1FsV5HsAAAAA0UC+B+R7AAAAAPGw04yLfK8N+R4AAABANOw04yLfa0O+BwAAABANO824puf7rKyshIQEnT5wEhISLl68aMpss7Oz58+fTwg5cuTIhg0bTJmV4ZDvAQAAAEQD+d5IaWlpFEUplUrtgRRF7dmzx5TZHjlyhO60fvXq1fQraZsB8j0AAACAaCDfG8mQfK9QKPR7zSeEqNVq+m1W2iorKwl3vtdoNKWlpfqzqqqqYl1EkyDfAwAAAIgG8r2R+PN9WVlZv379vLy8vLy8oqOj6Wiek5Pj4eGxbt26Vq1aSSSS6Ojo+/fvE0IKCgqeeuopqVTarl27+Ph4/Xy/fv16T09PNze3jh07Hjp0iBBSVFTk5OS0ZcsWb2/vtLQ0U1aEIN8DAAAAiAjyvZHofD9x4sTJWph8/9FHH7322mvl5eUqlSo2NnbevHmEkJycHIqiRowYQb+h1s/PLyUlhRAyfPjwF198MScn5+zZs+Hh4Tr5Pi0tzcPD49ChQxqN5ueff3ZyciouLi4sLKQoKjo6+sCBA6i/BwAAAAAG8r2R6Hw/e/bseXXmzp3L5PsbN248ePCgvLz84sWLL7744uDBg0ldvs/Ly6PnMGTIkAULFiiVSk9Pz6NHj9IDly1bppPvBw8ePGHCBEWdiIiIr776is73GRkZpqwCA/keAAAAQDSQ743E3z7n8OHDzzzzjLe3d3R0dFRUlHa+p9vZE0LGjBmTmJh4/PhxqVTKzCc9PV0n33fp0sXLy6u9lvXr19P5Xr8Rv3GQ7wEAAABEA/neSDz5XqPRhIaGfvjhh7W1tYSQOXPmvPLKK6Qu31dXV9Mj0/n+77//pijq0qVL9MBPPvlEJ9/HxMRMnz6dWUR2dva9e/eQ7wEAAACAFfK9kXjyfWVlpYeHR3p6OiEkPz+/Y8eOcXFxhCPfq1Sq0NDQKVOm3L9/v7CwsHv37jr5fu3atYGBgdnZ2YSQ9PR0FxeXf//9F/keAAAAAFgh3xuJv33ORx995Onp2alTp86dO3/++edeXl7ffPMNa74nhJw4ccLPz8/Ly8vDw2PevHk6+V6lUk2cONHBweGRRx7x9vbeunUrIQT5HgAAAABYId9bSllZWW5uLv3v0tLSiooKnpGrq6szMzMfPHjANcLNmzdPDAjPuAAAGzBJREFUnz7NM4IpkO8BAAAARAP5HpDvAQAAAMTDTjMu8r025HsAAAAA0bDTjIt8rw35HgAAAEA07DTjIt9rQ74HAAAAEA07zbjI99qQ7wEAAABEw04zLvK9NuR7AAAAANGw04yLfK8N+R4AAABANOw04yLfa0O+BwAAABANO824yPfakO8BAAAARMNOMy6d73fBrl276jaF0PsEAAAAAMzArvM9MJDvAQAAAMTBTvM9AAAAAIAoId8DAAAAAIgH8j0AAAAAgHgg3wMAAAAAiAfyPQAAAACAeCDfAwAAAACIB/I9AAAAAIB4IN8DAAAAAIgH8j0AAAAAgHgg3wMAAAAAiAfyPQAAAACAeCDfAwAAAACIB/I9AAAAAIB4IN8DAAAAAIgH8j0AAAAAgHgg3wMAAAAAiAfyPQAAAACAeCDfAwAAAACIB/I9AAAAAIB4IN8DAAAAAIgH8j0AAAAAgHgg3wMAAAAAiAfyPQAAAACAeCDfAwAAAACIB/I9AAAAAIB4IN8DAAAAAIgH8j0AAAAAgHgg3wMAAAAAiAfyPQAAAACAeCDfAwAAAACIB/I9AAAAAIB4IN8DAAAAAIgH8j0AAAAAgHgg3wMAAAAAiAfyPQAAAACAeCDfAwAAAACIB/I9AAAAAIB4IN8DAAAAAIgH8j0AAAAAgHhYdb6/eqGU2lb2W4NhqjV7i6mMKoFK1Lzyy6htxVEXVEKXAwAAAKBRVVO3FVN7FVeFLgeION9XTd1WrDd5437LMGYqS/gto5jaVrqmTOhy2KCrF0qpbcXUNmzAZpRf1ownDufZTe/6qfmNzaBMEbVN50piT3UHZpRfxnEvr5qqu4VtnZH3FC6/ZRQbdKw2E5PPKQOVKaJsJfw16zXNEKo1e5srOtNXSCNuoKiXtBpWlO+1MlnTP7p3EdWavUZeOhvm+4fz4f1YKEE29Uswe1Ht5TR7eDHS+hhxEcwva+qBp3WAcRwqoso3fH67UNro/YD9HN+r+K2Rc1/3Fsv91dfQTHn1Qik9h98ymJ1oSL6377OMEP0tTIdUti2gvy8MuZyynlxajD1JHx57rPuXnifbFaPBVHUXGXMlXavK98afU/rX3sY/Dc/opsxB+0jTuZ6wHIT6R0tTLsjNeU0zTLPle/rLnjG3sCbUSxpz5DTc102/GthVlZ8V5Xt9Rtff09dN43YwS75vhohmwoFeVzyee6dV1UBY3G8ZeldAnquA9s7NL6NYbrccx0CZIsqQfC+27d+0iKZ9w9PeIzq/krGd6ax/4lp63QhcO1r3jsjcJlW/ZZTWXRCMz/ei28s8WNIexx29kVzIs9P5IoLRJ+nDY4NliXX3C/0l6tQTibL+3lznlB7dKyQfvm9fROv+2HAEvnzPe0ttWCorvKZxRZTmyfd0kUrXlDVWGW96QOfWyCFBY78a8I+PfG/L+C6a9KWK94gRJt/roE+bpp3GWuckg7k0W1stsiV/wuPK941nAjPk+4bbn+O21HzMv52NOCNY7kl898KGG5blXthwVlojqNbs5dh9OsdDmSKqfrPQO67stybke3s+y1hTO+uPjY3ke86WkPxXP+NPUjqdc3wPYYl9xOyBXocV5XvTzyl9Tcr3ZfzVsTy7gG0f1edOnd3Nuq+t4JqmexsSMN/rXuKa0jqLuZaazrBTD/mel9Xle+Z3c0J0bsPEgB/feZvl8N42WH9li7pQJUi+Zz2jGnswgC15EL5aKwHRKyj+fE/4fvpvBhbYzlpbo0wRpbe+Dc5f7Uksn+85KswaXzopU0TtLfutzNh8T+zqLGO/CLNdsozM943kCRNOUvamRPRdZi9bZaGFT17rz/eNnlMmtap9uFCtpiBcmb5h7m+4B/WDYF2NOMexV/dzDVvCFuqapp/v8w2oGjd/MmFP1YZeScxXoWDoqYF8z8um8j3/vqz7ys5xeBlYE6PzBbTu3OP5Hcr8V3/2lvdG5nvOWishmT158N1m9iquCpjvjfkpxmws+j2KEJYLOtu9kIX5871uXQBDfxKuJ1tMyPf2cZYRQrhTu2rN3tKp+XoNJBrJ902vMjflJGX7/fbh14kLLOeppU8fa8/3TTin2DSl/t4EegdM41+2H34BYN+zglzTrKH+3oDfzXgvj+b7scvw7wl1VwNDvmdGXVAh3wuMO9/zNZKbmt9om3vOCRvSOUZZbhs87eq416gJNwmutqfmyff153Dd9tSPPnzbh7DsCI5zXueUa/CUG99SGisD/yqwXqQEr79n2UQNV5M9MFnxdtaZT92fhMr3azjPSt1JHm6ZvYqrjT+oo7/lcZYZ3CsOZzpsuIJspyrf1dKUk/RhNU2D46Tuequ/Z/V/DdZLMNpXG+06Ztbt07CSiLlncdyD2HcN608Q7C2VdbdkwyOqfrOb4ZxqajtszlI1+NQ1mWP9a/3SdXcK9wPfeluMMyg3+zVN6HxvyEbjT/AGB7BGsxNPezk9qL/nZTv53sDKANb9bfDABvfFjCpz5Hv+bKSHu9LLPO1z6m5IazJ0L5Sc34AN6QGDtT2u7qd0TVkjycOgMnCvAuG6cDcl3zfp00i+fzhDrp3Cc+Gz8u1cNVU/dmRUEeHyff2zgKybiBnIBBGW87FqKssdTifO4iwzd75vuDH1UoKB506TTlK9yK7V1ES3OWiDs5Iz37N0lsL7JChH8QzYNSxNhpgtqf+9pW7mbPm7QcWZKecU4bg7cw9sUDtepnuEaNVwqa6yP/HMs1O4voE3xFLHL+g1jT3f6z/8YIF838R+MHnusI3mIkOyE70Z1xjY6B/5npfN5Pv6RtX8e9SkfK9as7c0ir58PKz8YGl/b8n6e75rkxH5nrlb1C/94Q2pNIrjgaQG5ay7lTa8QbI+Qqo9kIkdOvcb3Ud2WBvCNl4GrlWo3wjF1N6yqdrlbL76e/a8xbqa+tVyDXOkNW9nzh9zG+kcjTWcZVSZK9+z1UI1yCK/ZdDHBts9kr0GofF8b2dnmcH5vpFbLz0fBXebKI5n9Uw6SfW2iXYlt85PbSy/vHHk+4a7pu540L3+UBz11no/L/DvGr2WYFrPD+hdjrjPi/wyA/N9o+cU63bmH8jTx6XOshr/vqe7UwxrJcL2S46Q1zTWuwZLecyd7xv8yMP1IIT+98yGl8H6s8DUfM/Ev/qHcPgTOfI9LxvJ9zp7kfXkpJmS7/PL6uqryn57+N+yqXu1KvLZjngzti9seGMw4GQz8IdO/Wo59od3ufsP5r2g6PzK3NhPn/Xj6CzO0DLw9EKtW01VdyAJle85f4cxpqcOK9rODWalX//a+Ldfvrquhnuhaf1jsmxerSzy8OLOcY+s/6tujMZZpqXJbxhg1+DazjYaV0Md0/K9zmo2fJa3wTnItvW48j3bw5eNPtdbd4VvbDTdMuse4Q83INvvVNpfazlPZNPOqQbbwdCPzvcrquE2rG9uxPxVpzVRg+1mvnxfv7LNfk3jap+je7Q3Q/85TfXwC+fUjMbrPfnzvfbJyPz7apmKr6PMBtvHgNZcyPfCYs33v10ojWLvsYH911uj8v3D38Ia7R+zqfX3hqLvZ3s5b4qG1d9zXqMfYr+u8fxuwHW55GwkashDY2z3ToPLwH1ppg+JqIdXQK2KLgHa33O1y+J7jIS/8z7r2c66i9C9+5p0L9Q5r5vWPoelDPVZpO5VVuz3yLoi6fzVkHxvV2eZofmepRsrbfXnGuv5xX0gmZjvG6ym7lK0sx1brS1v+3udddd9cozrkSqddGLArmn4wwKznbXPKd0+iLTqmPW+P5h0TmlvB+Pq701mrvY59QS4pnG2v9fZO9aW7+s3vsE9KXFsSZavQPqPvvDnPdaN03Ag8r1ta2LrzAbHk95Vshnzfd0Vk/v4M/b52obYb0g8dR6sV0+eLWlQMQyqG+P6E+dj/g+b0q6pDxZ1u0+Y52t16+e0BzaW7615O/Mw9KXLPPdC3tfEGJJFdErO8RZVns7aG0QQ1nxv92eZzulQppjayHMLuhrsZY5adp7uTUzI99qpWreQWluMu0d/A/J9wy3Puc0b5nvDDw/t/9avglYkYo2kTX6+tgnnlPH5nr++w5CYaMLztQb1L9ks1zSe52sbj7CC0f4Ob0gu4hpH/0qll+/rB3LfspHvdVlhvjeoXYp+QH/I8PZYet8X6X8Lku/rKwyEzPeNVx2xXjrZaqGMqFk0tAycyaNuhxrd/z1HiwKj8z1rLZFBu8l6t3PTn25kPVW5b3i6v78bk++1TmdD833D867+SGCPI3Z8lulvz/wy1u3PWzzWYK3f+xDXShl9ktaXjWn2yfLSU6ZDZPYHmi2a7w36ead+Qu0rW32Zeb9cMW1ptNtSm3hOmdh/Tt3PrY3cuOtO0oZXD73N23hrt4Y1L9ZwTePrP0el1fOs+fO9cR0P6l+gjM73PFGeuwkua8Mn5Htd1prvGzzk1LBSs+HzT8bnew6s+Z73HDDr4SJMvm+s6efDbc56o2JvbMpfNWJMy2CdpqWsp3FdMwwT8r3R13fW7V93ZddaigHVS9a8nbk1ZXzOeyH7w4IMQ7OIFv1ecfRnop+HqqaaP9+L4CwjOtuK6WOEZRyeg4HtfKw7JHhibv1KGR3CtFdtTYb+gh5ufI7uO4zL9w/3nant7/V7+np4Y9L79tv4TVCvkZKJ55QZ2ucYWK/X6PO1hPWqq03v/Vbcmu2aJnT/mA0Y88utcfme83LKW0GgtRGQ73nZfb4vU+i8r67R+vumakr/OYLle7YeHri6bjC0Fwidpej37MFVN2xYzx6c9a/G5nuudpYm1N/Xbw3+zjRIw97ZrHg7c2lYgdfoCdigsbt+A+gLOvuL2ThNzyIseUJ3Jnz9Yxi4l9mmEuFZxhSvrssB1ssavT2nZnA9AcyVUepXs7FeNY0+SbVnUtdVGlvho9j3snH5vv47iV574oYDDdw1zOR7S3V+ZKh/AEmvApj7d0WznFOcoxl8L25C/b3+hOytifiGGxDymvOaZj35nuWXq4ePJvIzov09T6Rp7AfAOiY/X1tfbNNinnWy+3yv9xOtufM913OWPOURIt9zn5+8vZUx1WAszWf5ql44Lp2GlIF1Fa5eKGXGMTbfc7WzNC3fMxtNN1CyfHRrZ61vO7NrEBeY4MJ5KGqvnfbq6DSc0A1DTDdWZs33jdxIWH4rt9+zjBCilSzZN4J2tGX9gsG+wQ3NUiaepHpbQH8Slj5bGi696fme67HsqXr71KBdQwjROkjYDwn9ThU552n6OdW0JrUcu9iY+nudzcVyABswE3bNfE0ztIRNCCRNq1iksTZLK6v6Lb/xe4Ep7e85xjQq3/PfsFiebaj/ndaUdh/WSXT5vomP5zfWGZbd1N8/pHOR5XwURvvuyNGVh+5li/WbGNufGitDY7mTK9+zf+p2LvduMjXfs9XI6t9+2FslWvN21l4L9k459GbbaE9nWh1Z6tYlR11QGZNFWK4S9TNp7NzUry22+7OMt3Gz/vbU/XLLFiDqshGzVTkbrJt8kjZcC74GvjxtSIzI99qrWb9BeLvK5Ts8tFZB569sl5pG5mmWc4qN5evv+fI92wgG3YgFuaYZWn9vaO9VpNFu+zlK29iXUv6Gc8LmewM03LZamaoJG9aGWFG+N6JhpX5KM2I+HM1AaQY93W/O3r4eHn9NqRER3UFpIqPq73k6r+CIDiY/6WHLDGlKQQjbbxesdO+ROt/SdfpSZDkLuO4Z3B2JcDVT1v0qaEeNNQ3AU9/B1cpc+1EB3dp3toYrdVi6lsdJagkmnVNGP51JXxZY3vvblMnN2kxFqGtaI/TyjIF9exja7Q8hxPBjgCd2G5Ddm9C4yEL5nq2jUtbnrETCivK9lTDwZRaWYmfPf1iCMfm+0SaPWnUwdv3Niv3hgUbw1iSx1zjq5gZD+/rQv1HhbLK4ugjCkwjLftPZU4a9XaHBs5I4SS3C7s8pga9plmGxBie/ZZRGXWApOUe+b+wHRg5mzPc6m52t2x/RXiiQ7wFAIEZ11ADWxKCeOgHshXVc0yzzlh6wMcj3AAAAAADigXwPAAAAACAeyPcAAAAAAOKBfA8AAAAAIB7I9wAAAAAA4oF8DwAAAAAgHsj3AAAAAADigXxvS4x/1Z8dfITeOQAAAABWAfneZggeoK3/I/QuAgAAABAe8r3NEDw9W/8HmxoffMz7Mdc5BQAAzQn53mYIfqe3/g+2Mz74mP1jltMKAACaE/K9LRH8Tm/NH2xkfPCxxMdcZxaIgOBHo+AfofcAgKGQ7wEaEPz+gQ8+VvUR+owEayH4oWglH6H3A4BBkO8BdAl+/8AHHyv5CH0ughUR/Gi0ko/Q+wHAIMj3AAAA0AjBg7WVfITeDwAGQb4HAACAxgmerQX/CL0HAAyFfA8AAAAAIB7I9wAAAAAA4oF8DwAA8P/tnTtu4zAQhi/i0qdx5bOk8FkW8FEMHyV7AxdGiiBAAG2hFx8z5FCUtYzyfXATRRyRQ4rziyIpAID9gL4HAAAAANgP6HsAAAAAgP2AvgcA2Jz36/NwfJyu3/87I2Dldnkcjo+3e+68+8fh+DhcvrbI0y+kOfd+vR0fh+PHrcIEvcFP5H/WmukuQN8DAGxO0xE9ETyaU1fbgb5fh0r/NOfe5vV9vcdcC38/T8fHIfoJme9TDb/IP2vZ6bqxCsafWtLvP+eEka4bK2L8Pf/8TXkFfQ8AACEt6/uEkLVq3D2Cvl+F2ibUnHtb1/f196xnwabL+yT+z5fLL7Vz/nxPGREra1L/ueeNEfQ9AACE2GPD7SKPJGnHa+njpR8g8//6BaDvV6C+CTXn3rb1fb3DAwsWg8OI+9w7DQrbTbWindis78xJ35+un1pljSP387XGI5nB/po+fDnoewCANjHHhn5UKY4N2vEXZqzldw4bgL6vZ4Um1Jx7m9b39ZZDC3ldPgyE+3dK7yWnv1rLjpJhpYWolSXd3Zk+troPrwB9DwDQJq3q+4TZVz1R/BTQ99Ws0YSac2/L+r7e4ZGFvC6XHdLfPiXPCTY7MakWgr4HAIBX4sYGd3qoE2DE+aAfN/V41/lRyjXrByE93lhX1oqjaOJ42/RuepskQsaDhPEcXENdTJcQfBsqfs2H3jJBVRFGtSYpEn/OsVlh6JfO5U1x0XxayiGyZ5ZWrujetEOiKdqBfWMDcE92POBW0MJCFWXA2JBEX9n6h5SFvC7XTghMrWUnonem0gj1h7HerHs524UW9eGJ5LZ7Cn0PANAmY+f+FQeAMdbW6HvpnCCySkHdvrJWGEWbVJQXdeaAuk0SmVASPdxYnqgL1xUm33Zi6JWX7kWuFk6LZwz7+rL/JR9skmU35k13kdwgX9SERPdmHKKs47SVLl9B4g1YWihDb1BQWZrDO3sb1i0I/gwkePr5NpjHX2/HZ2gM6mNDqqNwp+CP2jr1WqaiD08nN9xT6HsAgDaZRUmstLzgVDY/Z5AX56drJFo6ptgsWlkbRdn36/NwfJ7OflDsE/ZxaJskMZPADQSWr++zdWHzbUKAeg6PBcR4RNSm02nCCPHtout7a9kzeZtdNNsZNiU8nZ+ZFZBuWSqbUBe7N+eQYP2lJAGLGkCmghYVypgBY2V5l5B2ksm3Yd2C8rwULksVXgiI63Tr7XThE2zydVZuIMDJVfa1WGUfXnVPoe8BANpEHmcaoosbfpbo+1hd5SetFq+sDSPl7fI4nD/f7x/uUJP/rnybJAFDxM3uc5etC6tvDQJUSqicNmiXQN8bZ3tny27Mm+KiaHuTrhPb8Gyhuglp7i2a/h4msTWAhRVkKVRVBpS7W7ydi/oH0/zySRCHb8MMunwtO9EbqlyDT4/fC2PtIpV9eNU9hb4HAGgTJXrFIXzR+L32jZhUPCheWeu/u/96c+eLDxfqE4YS+dVJfPL6z1gXVt/a5xnHnw0STpP0YjTYqWAbrczmTXORnFy86GpNSJtTnneIPm3d1AAKK6ioUHUZSEwJq+kfzKtCB/WZXCDR5V6yrWVHng01od4R+lud0v0xrX141T2FvgcAaBMlNsSRYIm+F0ays/FgwTdr3ePz8KSjXeJIvE0SF8M228a6sPo2/aeWUD2tYn1ttuzmSq/V9y9qQkFORIco8+8N8tpvAPYKKi9UXQakfyknF/QPBfsU+QuILXX9WjuJPTQ1fb9kr57KPhx9DwCwQ1rT94u+WRsshPXWjb3dXXGzcRIHZbqIyxb6PjvsWqTv/Zyrxc+W3Zi3an2/ZhNKtuTIIaLUk+fnrKbvywtVkAHb+L3mcHv/UPLVWz+fBRO0NrHjodxN2hiBobGh7wEAYOal+j7q9+Ud+maWfrN2FAHu3IMhyen67YqbjZM4DEvWEkqlSN/nfVs4/35IGExOmAind0fkd/tOlN2Wt0otsm4TKnoTlRrsL9T3JRVUWihbC7RWVsLh1jZc9NXb0J8Lv0u1mp0F4/fJZwn0PQAAWCmMDdqZyvo5aSguCpyGrSqyo2X3j8Ow20O06/P5mdi++pVJ5NJFpQj3kLHq+4xvExPE09ueTDviRabcg9FuML5iKy67LW9VWmTlJhQvb0g4JF6tKGxJZGwAtgpaVKjCFriosryTM204bSG7+2e8IU/8XLGSne8/Z/EBoHT+/ZhKWrY72jd2m9Y+HH0PALBDzLEh/p5O6vgwkncV5hyHg3PhJs3Lvlk7xkVp/FKRCC9OIu3u734pZv4t0vcZ33ZF+9+Lu2QElv3Qnt5VsLzsxrxVaJG1m5C4fFnN/GR8/mmfFMjfjOK1Lh+SZCwrVKlSTFZWyuG2Npy3oDenRD5lV9TZ0RwivB6Rf8E8usQJ0c1V2Yej7wEAdog9NnTK1w3F4/Obek+LJDczWbCyNs5DcI64y9tGSZK7+0s+KZ5/n/Jtbl1grBs8XD3aX1oJ7bKd4rIb87Zci6zehLSVoGrmPQn4do9yWHYzeg8M6geGCwtV1Btkypt0uKkN29bqSA8G+mmStZXshBI/HiAw6fuui54GMx1LZR+OvgcAACslq+LySRZYg5UpmgndHjShjUk73FIdVNleQN8DAOyF4ti8dGUtbIOyIPKHQBPamJzD8/0DVbYf0PcAAHuhVN8vX1kLa/N+fUoLhdU5S+1DE9qYrMOz/QNVtiPQ9wAAe4F36z8XbZYwYgvWgv7hN4G+BwDYC8Tvn024iUfqs1wApdA//CbQ9wAAAAAA+wF9DwAAAACwH9D3AAAAAAD7AX0PAAAAALAf0PcAAAAAAPsBfQ8AAAAAsB/Q9wAAAAAA+wF9DwAAAACwH9D3AAAAAAD7AX0PAAAAALAf/gE+Z3gLWPGxQQAAAABJRU5ErkJggg==" alt="" />
=======================================================================
Boost.Asio和多线程的那些事儿
aaarticlea/png;base64,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*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" alt="" />
我觉得,这里用“线程可重入”来表示更好一点。
aaarticlea/png;base64,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" alt="" />
简单的说,用io_service::run()来执行完成例程,用io_service::post()来向线程池投递任务。
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAAAoCAIAAAAuQsLFAAACiklEQVR4nO2ZwXHEIAxF6UgVUZC7oRj3sznYayQhgTJRdmeY/24xLMjwjGSnvABIonw7ALAPkAmkAZlAGpAJpAGZQBqQCaQBmUAakAmkAZlAGpAJpAGZQBqQCaQBmUAaQZnOg0qpLdQx0i2FVq2YWi0utcXvJInzoELH+bH5vklQplZLZEns7f0n1jFZ4nw0xF88hTsQkym4JB99CgMxGbp9+qAIPoV7EJNJLMm9H+dBV+64Gp4/S99i61of4M5HtT3HxZOhhCM8b7GG9Ta1qod6DHwi681XDHeDf0/zoMSPdFKdDLcHIZnkIXCv472RbE9lBmm1d5I732ohItb1vcrXFTGb/uHzx/qI8ZIcEXFZ7h7nQYWI+pB+/H5QesRa6/qu9iEi03mQWjwlQt8arxdfSzmccaGJHeA9ma7r2sdJclp49iToR8GP3w5K68t9lPHuWZZHZLKS3LuNicCXa9zI3jq0KS+M7MQncwaZdbbvZDTctMwO0ppnMESffLumtzcBmca8b1YufCmd13N7yf0dFlVGGSq06cZYPawHwTzoZvG7QY0zWvPtWzGFZBoqBPv01weTs2Dm46uzRj/qhnQ4ThaIml2zS3ijxRneD2p6MKmre/q0lmlWOXp5R6/rRIPYUad6/qH6dpOcnipmjJ8pWQVgtmxo01ImUR2HC+LBQPHSNCmYdLKUFX34YBqKfB3Ta3YwTeKfBCUnHeK1X/m2YimTfh33PvXI13t2oYhd1ds2KZheona5P0zVNv5oEbUzNdPWPOjs+P2gVNv1yUp9aZDF13bgH70gDcgE0oBMIA3IBNKATCANyATSgEwgDcgE0oBMIA3IBNKATCANyATSgEwgDcgE0vgBg3QC8JQF+j0AAAAASUVORK5CYII=" alt="" />
我并不想在Linux和Windows之外的平台上用Boost,事实上我只打算在Windows上写代码。忽略这块应该没问题。
=======================================================================
当一个名词不知道怎么翻译时,那就不要翻译。
=======================================================================
Strands
aaarticlea/png;base64,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" alt="" />
1 只在一个线程里调用io_service::run(),这是隐式的。
2 像HTTP那种在一个连接里只有一个异步操作链的情况,这是隐式的。
3 明确调用io_service::strand的是显示的。
(这都说的些什么啊,不懂。感觉Strands像是把要并行执行的东西放在一个受到访问锁保护的queue里。就像麻绳一样,好多股拧成了一根。)
=======================================================================
Buffers
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVwAAAAgCAIAAADR41d1AAAE0ElEQVR4nO2b3bXjKgyF3REVUZC7oRj3k/sQx9bPlpCTuTnOWvt7mgQbhJA2gpNZHoQQIlj+2gBCyL2gKBBCFBQFQoiCokAIUVAUCCEKigIhREFRIIQoqqIw+iLoQzVuazPffIltbc6YAsdk2rrVm671X3p/9E+GuYhYpW1tH03wjaHP8YwdpfV7c6EFX3X1j1MRBbsio6ukGf3D9Xqf94ZO3voncylG8Hcz8w9XKbajbFRZZjHfFsEfpyAKYOVk2P+hw98bOgmwD2PvWi9fTdO7pIWtGWpGfVoo3EURf4SiKNil25dzW5s+Ujy9v3/9fMk9o3tGTa8YeLX3IftRMbX0cfSCutCTGMIWY8wGmoR90gH75PdWF2xqaOuovR/Qc8VPbd1EJiE7kEttz8Y3wSwj051lumYEJeRrvMiO4/swb00Ixq4CLXZ610JUNtkYKIRo4t4bUzk+PKeVbK6HI7e1La21IEx8BB2ffFPvXXtapJNe7ucnEOlifV0moam4XUwnrDS2tRaGsJuYNn7/p7aj5qfdvUIAtB2xS6OiPZllbHrkstFba9pN6/ZwS6bsON9IqgHVNPoSfHCPIVdfCVEn78aHtRBV7v2JeqV40XjKHVBS42CzB5nUFDls9VSttF4MlCOmwXVht5ZzK51fKLgFFPbacZGrYNCqXtyEsZ+AuCkZNJMMXBoU7dksE9MDn43e1rE28b6TYS+7kaRJ5ETdQ5HiiLGcEtVCNN5YLoVoEKF35tKfJEF55AqFdJVDr9hLirAXky82CeA2LMetXSiADCh1Ya03/YjgsRGG/eQ3F/Hs5OoiDO/jQzrL2PQHfmH0/axx9O0H94UCFG4wBpDS8zWp1r4Pr0RvhaiNj0qI5kX2bXnjdwoyPnyhAM+qErHNaWSOpA4PzgE6oP2FQr1GBU+dX01ux7KCEUd34qcsZp0dsUtNkb9/P51lYLrz2n7T8brweKmZr6CDggX6ChmFrADxYSra6OiUux63whoiDFHdy+9Iw0QUsG6eXkgcPivU0bWNb4s12XYfZ74p2t8uFI5UKu7PsPb3GV070KBJBnWSM0R2k6pbsLCTbfxZIRzv9fHYzlPEvGDB9iOjgkIB1gYLcvWFEHUdhzXatPh4ffszujARBZwChy+VA+yz6DMOR3t4MDqr/S8WZr4LmyeTjM5ip3gnYe2N6+PsjDG7eYkvG0oyG57Bsy05KbBGX9o6jt8jjb60de0w950dVwsFXB3Csuf4PHV14LV4z6mGaHK8vTmz44O9DfLXPpH0g11TfVDhscB0STR53wxQ/vlhwzQQJBWhNL1weIgeFSPopthP/q4lPTxhl7pCASdm0XTLtraltSbMV38RiUqi6vHEVOMuxVXn6LlU7BPX+5GCQnQSotEVyp0p/6LRn/1Fy0uS3aTFq/5sfDbI66pJZaYDHR/YxKjPnzHMM9o3aQuBCZGnZA5HYb93roMYHz3FFIculIwdkUvVKqEN0A1cztgHDP3IX4kd8cq4sWU0ag+oOwBt0fK6+LgQonqgqAKIQ9R08SuK8OB/iPolkiKekH8HReHGZJfchPxfUBRujaqIqQjkK1AUCCEKigIhREFRIIQoKAqEEAVFgRCioCgQQhQUBUKIgqJACFFQFAghiv8AHiIFCjicsTQAAAAASUVORK5CYII=" alt="" />
boost::asio::basic_streambuf
使用data()来获得输入顺序。(这样在循环里就能获得输入数据。)
使用prepare()来获得输出顺序。(这样在循环里就能获得输出数据。)
使用commit()来把输出数据附加到输入数据的尾部。(从这篇文档不能看出有毛用,但看起来是复制缓存的。)
使用consume()来移除输入数据的开始部分。(看起来可以强制认定某块数据为脏数据,然后丢弃掉。)
按字节复制缓冲
boost::asio::streambuf sb; std::size_t n = boost::asio::read_until(sock, sb, '\n');//从Socket中获得数据 boost::asio::streambuf::const_buffers_type bufs = sb.data();//复制到常量缓冲中 std::string line(boost::asio::buffers_begin(bufs),boost::asio::buffers_begin(bufs) + n);//复制到string中
=======================================================================
Streams,Short Reads and Short Writes
aaarticlea/png;base64,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" alt="" />
基于流式的I/O模型
1 使用SyncReadStream的read_some()来实现同步读。
3 使用SyncWriteStream的write_some()来实现同步写。
2 使用AsyncReadStream的async_read_some()来实现异步读。
4 使用AsyncWriteStream的async_write_some()来实现异步写。
传输精确的字节:
read()
async_read()
write()
async_write()
=======================================================================
Reactor-Style Operations
aaarticlea/png;base64,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" alt="" />
看起来像是说,对于那些自己实现了通信功能的第三方组件想要集成到使用Asio库中时,Asio库提供了null_buffer类型用于读写操作。
在I/O对象就绪前,nullbuffer操作不会返回。
看例子中是read_handler处理程序完成操作后,async_read_some函数才会返回。
=======================================================================
Line-Based Operations
按行读取 "\r\n"
read_until
async_read_until
读取数据直到遇到空格
typedef boost::asio::buffers_iterator<boost::asio::streambuf::const_buffers_type> iterator; std::pair<iterator, bool>
match_whitespace(iterator begin, iterator end)
{
iterator i = begin;
while (i != end)
if (std::isspace(*i++))
return std::make_pair(i, true); return std::make_pair(i, false);
} boost::asio::streambuf b;
boost::asio::read_until(s, b, match_whitespace);
读取数据直到遇到指定字符
class match_char
{
public:
explicit match_char(char c) : c_(c) {} template <typename Iterator>
std::pair<Iterator, bool> operator()(Iterator begin, Iterator end) const
{
Iterator i = begin;
while (i != end)
if (c_ == *i++)
return std::make_pair(i, true); return std::make_pair(i, false);
} private:
char c_;
}; namespace boost { namespace asio {
template <> struct is_match_condition<match_char>
: public boost::true_type {};
} } // namespace boost::asio boost::asio::streambuf b;
boost::asio::read_until(s, b, match_char('a'));
aaarticlea/png;base64,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" alt="" />
(没看懂is_match_condition是想干什么。看起来是向命名空间里添加了扩展。没具体例子没看出有什么用。)
=======================================================================
Custom Memory Allocation
说了一大堆,大概就是一切都考虑好了,只要放心的用这两个函数就行了:
void* asio_handler_allocate(size_t, ...);
void asio_handler_deallocate(void*, size_t, ...); //分配
void* pointer = asio_handler_allocate(size, &h);
//回收
asio_handler_deallocate(pointer, size, &h);
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7gAAAA6CAIAAAAVy2JCAAAWhElEQVR4nO1dW7aiMBB0UeyI9bAcNuNm7nwokHSqHwkB41j1McdR0ulH9UPwwuOPIAiCIAiCIIgCj08rQBAEQRAEQRAjgoMyQRAEQRAEQQBwUCYIgiAIgiAIAA7KBEEQBEEQBAHAQZkgCIIgCIIgADgoEwRBEARBEARAeFB+LtOjxLSsy/SY1ytVJDI8N4c/L/D8aZnr/ObFcxiVbsTFuraEfp1RMPqHibCAo3DgKuJcv++lVejSWmfveEvdGbda9m33J7UaswWMqdXH0dstZ3Okkz71Z5TFxh+hyy9ztHvz6OlMrzEH8a3x/ZZBuVOYfhl1oUYOTyXcOSi37XtnSt42H5c7mm/1xjdUy59q9+5G39qYNlyk/4UlpSlHLiitHJS/DSMPygOqdCu+ZFD+VveOBA7K1+FHBuWvqJY/1e45KJ8X27ektCk87qD8Pj+efrC9pWmZXNx5H6GZt0t6F/39/1sPOETtXeG5TI952d6f1+MYoE7k4NKcwKpSsecyTfM8PR6PeZ4ffgk6bN8Ohl0EeAB5GAjMnWnLzC2WHTjdbkGh1JZLPXuoJDlTH/HC86sfr+cyveIqNq7PBaSAMkAg4cd7sxyVRJg2Nq5/5/NI1VkEyPdktBQoHnjmdtmulgeb/nygrGmIAiS5qKItivXYN2QvipSTdCd4Hq8hWelBdiNSoMxCuSwiAjUPlvehqqWBLu1eeNWqJ89lmpYlF+aUu6b2DVxRkPy6XilW7Qzw6x5gmkpF10AcNbvOwOuThVvOlJTSP4/dOYWTQZ2P6eM25RxdBuW0kktqP5dJ+5GknI8xS5KTIvvLInPe/8kV2Nat8+5brI17MDTHXYUUey4T/GKA52QhIc/PzEWlB5CHbYGuTGkxnEL0UOLlVUwIqoQ4Uxdxz1E4XlCbplyIhh4Kx2mghCkrxufySNPZcIniyXgpgB7I7PJcnR3s+NMlQ0sUtiNk5NsUO7+vby+U5ibdCZ6Ha0hqEN76cBSyInez3MnKl4Pt0fI+SrU00aXd616FrTbdYFqeXrlrat9+Xbq4V0LShuQXTDtdeIUzUZ0xU7tvScGSvWmqTh+3KUt0GZSzb1GIcIUiIXcXDnKOTOVqR6jzjXVw2xZwVRaW5AifNKkEpYukh+FeZQp0ZcJYQ0eqMovlcSZUqOQ2gSp6oIjjeKFC25YL8IiW0CPpdkQ0k31HaTqXW3iebCsFOMuAUoUE2wmaXWYJikdB06FNsfP7uvZiaV7SdeG5X0Pc3HczoqBolsvQhqbyPkq1NNGl3WOv+nq//+NsdLoRY/kpLuiVkLR+ifVKXNxAVe3Sw15O9S0pUHJVnQ+VVrucSnT9jXKmRwqpBzbQimJ+ljz9NDPTZURFW84zrTTHWwUVy/dP1cWxyrZWugjaSM0jQ6Ans8KRbkFJRQaZUKdSwRl/g/x16Sg/XlqVr88FqACeG6TwXGBwLOiSR2F2uZ6sKwWFe2EY5zVGNhQs364TUdBeNynWYV/XXk2amXSneR6sIWFmQiuO1Voui95neSlK8s9XSx092r3iVdfszQpno6b2Hdj80l6JSducj0FV3ZKihtLsp31LCpQcmKYq9HEZW+C6Qdl0QcUZ5XyV3b7vOKPctkr7FrXO7wKszV0pU5tPK8YEujLjjgyX/h7nSGKc8Tf4y2NXOOr9Wo8XVLE9F2pDDwWGB+XzeRRn1/sAm/n1pQAuVz0T3qvOLrhXl0E5pliffU17NWmp7Y5DTBMMnvs1RLvsANO5sOKQ7+VyyEsxko9TLUt0affYq76s93+cjZrad8jnV/bK+BnlkCb1qlZVzlTt+gGqrqRAya6Tq/UJkD/BNYNy+i7WKfH34cQ1+wlJ6eKsO2bfdd6iVvAblEp2eH6tyHmkWLH/Or/+pgrNXUKA1kWwB5CHVYHFtQlXeceRWijL5UjPkypBziiK4tfQUW68XrYeE6ZBnhRVkdLbuer82KB8Po9snYtFpifDpQB6QK2DGtlka85eulnTHoWS5M7M4Ct2fl/fXiEtmHQneO50emFyjJmqFYXzdgqmu7ts3z5SST5ItbTRpd1XNM2Us+X42NaIvRLhcfiSXolJi5jgMi1eeP2qpfnKTO2+JUVKjjm5Sh+/KUtcNCi/rbFOa7/YkZ/M39+blmXOeCBEvQ9MTAUHRBt86ODSnMCqUrFy/3XGlzPk+u1W72qqF94GHkYCU2faMmscCUJpOQzr2a4S4IyiqFGvpaNC8TLvehHPhXDoofBt9bQs0TPK0L31eaTqXC6yPBkvBcgDRu0rXS0PxpluZQ1e5UXBIjlsA0HFTu8bsjcVFky6Ezy355tUDLjRh+6o0grRSsu7XoBmpbA98Qnm4jDVEp6nLpU0JDglDg4oBukttzc1YrtEFMzXW0C/XpmuSkiL6p7LtHjhDVQt+GagnypuiZYUTMK4k+v00WxXwUdYfxpGUycGBOPVC/Qk0R/W1PcBkOR1+E1/DUbaj+C5zAO7gIPyh/GbheF7wXj1Aj1J9MFz8X718TGQ5JX4GYcNTNqPYOw5mYPyB6FczCQGBePVC/Qk0RXJ7xGGOTNHkrfgZwblMUlLKOCgTBAEQRAEQRAAHJQJgiAIgiAIAmDIQfmHLr8ouMIDDTIrlsT/HME7ss127e/W76fRSf3v3PRqXKeVfT+Ez2MsbUbEnYH7hWhc6s/TMt+3GOj4E4NrYnpWz/Na9bSr5o7Flj4l8M1j/mNwUB4GA1p926AcuZmODbDqRoee17+jAp/d6Gbze80HndUeMJm7ouNAEBdVtenHU/JmdB+Ur5jYTuLyODbp2cY0655xIw3KO4wbBf4AOCgPgwGt5qDcsDsHZQ7KIyZzV3BQHg0jD8oDqtRRPgflH0DloHzcdzr5c97iZtTibidvlz6X6TEvy5Qd+ped238vei3YxB5vTvO8P8JGufu0Kf/kUyqQqL/nMk3Lsi08rF7lW0J/6cn89tdSw5iltv55Ja0IRMRj2X3+C9vVI8Vnie0i+ppYxbrjpxflveutKGQHzJDGAF31F+F5J46ISkG5TLlyI1cmWgV4Utyk/Qoal/5+LtOu1qv4B396Ea0Jxs3nA64DVTHRJnsWnMmBP5SDVa4zUlj4as8CkRFtNHBNgIlWBs6qYPCZEbGD21KyLWsiq2BAq8pO0J/QRaEA9UvkdLtFYWOIzBe3SLGdGaMkHjGm2e6VakQkBGzcW63dHbBdBeCgXJ1T34qqQVk8RXDvMUkXOJ75mReOjXnFKC2eyZkMweLztFmqzzM05TuPl0SGWOYfbE33EsR8LlPiE01//ZmTdZaa+ufuDQfC9ljqBRn7w3Z8JNINeFROgolYzbpyq01QKApoyDDm5L76F2onfk2YJCgn5my5UUgmZKwMYFFze9MYuWSdp2nalcrs9Qfl+ppgiihcB6viJu54J8ABmINttc7OXElyELAaGtSakPMkXoEt7sHQn0vJtqypJgyMiF124v4sXVQfIFeml8gRNraT+YoW6cYIr9KY5rlXSotLsPx2fG53B80uw0xVTzenvhXNP73YieZVqYzlxTldla/FkfDNVBN1FTzSzDcIKApWNVc96Em1iMQsjetfFwi9QmVLkBX7m/BIzbfxODqqor4aigKYbPTJoLf+Cjs1WZJyPkvR68aE0hx4hsa5T970mZZ1mVJFS8mahIaaoARGf1044fXpkpPN5UBoOtRd5y5XK8DJuuqZAI+wBzsI1f3XlJS2rDmfa/GyIyUYGQFLcUygKzOSyEYf6UDmK1pkuIO7TMvgFZw6CbbfjFwL2GWYqenp59S3onJQfi7Jn0DuXlj3qwKyfx/NTi8aDfmQhQAVIMwb80jFkANQlKDPul8XToESo/Tk1fqb1coJhL8kzTppOz4SbqS9hi51VM1c8/5PVRQgjSE66h+ThShnbBRp3iZjtQnpEhrv2G2b1791fuz/umOBGRdXGV9E/hpUxecyFX8a7nEA52DYdY21VL5uooFtAnSR2lwDFUxzi2u4NMFMybascVcF6OeXnYg/0UYtAfJk+olsE+8kma9okVUlIlAh3EYTk+YHSG/KOufV0qcrpunp59S3omZQzoKgnBHJGPlKTPT1CDMy3Shc3Bu/AZuJ7V7LqzijrBlVePI2/RsC4S8xvyhXn1GONmZTVeS7qii8389pbO9+Xv9KWZJyeKNIy49NmXfS+OX9JTmvvMzSSbbhbcpUu66siihJXA7UnVG+oJY2+jBigs6TtgqMq3Hg4HhKtmVN3aqmshP0J9yoIUCuzDiF4mzscEa5U4sMnQN2meY2GtfGWIAqziijHQ2Iwxpz6ltRMyiv+e9kyvP2OfnSJvf3p/EpWbOLCuVDqopR/dGRyavnMj1KLuJLNFDUc7F/wQf1dz1p6+/mUsOg7AQCeQx7Admu+CvXzfxChcXa1gmlii6lRiETLmkM0VH/WN2VlHM2qpka/K4GaNaNxgLi18lTcXkq3gN8ZdRTbZbroBPSI4/W5XEA5mBbrUPL81oHPd9EA9cEO9HqKlg6LpTVWDm4LSXbssZf5QV0+0QtO0F/er0vEKBOiWz3kbp+dEuLjMUoWeWdDbTdi3WISLD8dvQJm/OaXYZimp5+Tn0rqn568VyOPwRNLioeVzPywK9zdoHDKiD51RCvKEldrGqIjkzeS05S6YYYm752ErdWyGTB80nQk+8387mnxlJbf7vzeYHAHtvenZYF3fUiUQMfKT2LbN+dhsRa1qHQuFEo0zunMTzT0VP/YHu27Co3cmWiVXopfCStoz+NC78mdaZYa5f7ipqQ2hUVYTsh20zWSrfCiMoZcx1aDjLX8nwDDVwTzESLVzCxKSrs+OC2lGzLmsgqO6CJYGXQCPsTuigYoI6JbPeRCjLf1SKDMcodqjPNc6+lgy7B89vRam3OJ58q3Q2Z35hT34or76OsEut/wk8Y+dMoCsT84QJAyhHE/w5mOUEMgwsH5d/I9N+w8ocx3JxMyhHE/w4mOUGMg2sGZf263H8HFrT/F4PSmJQjiP8Xg5YdgvhdDPkIa4IgCIIgCIL4NDgoEwRBEARBEARA7X2UT1wPGvOK8XVaNfxh/n+PnzD2tJE/4SXiHGyS4JuoFJ/apekKxRqXW3+Oj5dfkUSnZb7vCNDxfgCj14pw4FRcbGELYbBR/YOr7Zvfp2K/w8UHbjVxVXDO06YzbjyjfFtKuxvdXFwurd32jt+FL1VbYiQzRtJlLPyKZ0w7yw/Pu+U/G5R78qRT+/8m6nrPgvHxLYPyDbNducX+zgW7aw5x7wbYARyUR9iIg/KY+FK1JUYyYyRdxsKveIaD8jmMc669u5w78DOD8h1BKfb9yPUTDsoOxOW8ZbsH9rwe98M+biu+XwxIHxRT3pV6f8eViVbli/anDGUXIY57jL/W5QcE7jGey8ceea3Nbttd+9MLbS98j3Tkimmes0etI6pJbyjB0iL43mJXWGzkrUo9YMcFk6RwXC1hIqsgDTYT5vyJTuqF7fIZNKXnhWegl6xAz6tKD7E25bPODW27IC1hARXaOjFNNUyOMCOyRraQYo274g/Jq+z/+15lKpWxQGxUS1PmltWnur719r4TREiY0q55xo0T5lQpB9IeMu26ZpFut6iGg+U2ddtUCjx3AxkCkxe9aQWutigp5bStkgQJU2uUCK7fJd0Kgxy27/tSNdk0t8lrGW1zFAwfTPZIQQZziOJh9zFwt6B9UN7UPh6p+PdcpuRV6qZpecravb9KircrU66SizDjj/kVF5dDz+TIg+VSPnSJeNZuam/FoFzutWaMKZ7DJlyRTO1qzklvwGCpEcyamHSXu0r1dvkAIUgS6bhqwvirVBog36oRLQKp2ZuKLbfwAo3pIXTRcqFkSDjF4L7q3AOSTYlpolYgMYHr8BZIrJojY/IqeedVXzL/GLFA8TNKE66Nmr+0rR9F6DTzjUFZlBX8PVCtITZ/Qkzr3CwcJ6uJZlK3RaVI0ShXqbQ30g0Hrr4oGT3+RCXRCHPOqGCXtGoFNuRYZqWt2zLa5ihk6bZQereqIB9zCHSQx9W7cOKMMqimuAu9/4M/tNts8hquSrnlt8B1NmpfXL7wyfv717Ssy5Qqajeh0qt4L3s8r1FV8wbuh1oE4RamKF8xMy6ZfM0LYcKcp5kYWZTKjvoAtDf1jM1kqAzuLb6ToEsreOXR0mG1okBo1o+5Lj3YFxtx2Yd5lXo0P+9gxwKx0ShNsBio7tK2jjNZr8NZ1NwmWci0t/ab7jXNolxuZ0q88p1MXim/PoLYt16dqavzBYG1VQ3xrSCMaVRdl1R9gbYK6FzHzKY5SqoMF4ZrvuNhj6t34Y5B+W119mGKeKcpVgU2zxfqq7I4ofamtoqXbfP6t86P/V+XxIVXrfKRX6OIuwIH0fD87gczgpq73FXytW1CSRLoOOV1G81cGpQjC3IxmDWCPJTuNAP99nJOD00XHDJxcJxXkJZmMnoxTQtsZl88MdEWWKyaI6Py6rkPyHBG0WKB2BhttC7V7a2bqmv6oTsoGzllbo0pYQtsM0cK10u9xrVg5atTKVw0/Fpkp5s3KLtFSSVwfSWRVhhD5wmj6rqkQxq8r5O/MExmEXYJqQWkueYXgdA9bHL1Lnz8jDKQrtcMM4nUOKUebzhJ4Eyf6/z6WdLyPq+8zNJJtuFu+qQ7ReToqmJvwGDZEdTcFV8Vj4uKJsLUrYInTl7vvwxTi7EUUWVvkDAC8Lu3HzJPchst46wWoirOKAd7zaVnlNtWtfFqu2yFvt4eAqTbNTYajbZCJXPrpuq6vwidw9Nzyt5apcSVzcJOCvhmhzPKseStk4+OTGVeeUa5PI0D0BBf29K6M8rxLulF6NQZ5UK3qgOsKSLcttTtikC4Hv7oyeULB+XN0s0+uLxSplzlDmFr/mMY60qEODTc5sWvk7fX1SSusCXiCtTYoDdgsJwIKu5yV6UNwI4LJgl0nOW7epp5NNg+2b8dFUic8Fzev9ZS7bULZk2g1Z6XfTUvQqa4tIWWggel69yYJmodW1QlJtwCidVyZFxeZUnrxCJXTLLRabTZ9pZKztZedXUIg8tK7g09p8JbH1Zc3SxU02J+g9RtUClUNGK1yEs3HLj6oiQJ3FZJooRpNqpMarVL2nUfGnLsa40WXg1vK/LS0pJ+NdvhOUSz1OTqXbjyjLL2p9Z/f8npdDQYqa+LVXpKP5KM2tasqXoPPMZF5JduScNerMUEKrzqGp2x1nRF5oFCV+SN4s+K3Qgid7mrihipcYE2YsdFfFdDM5sGiWAla1V/SntDBdMOtEaPTJnHQzdNIphieN9d/HFhRbrOjmmqYbKsLjHRFkCslSND8upvO7+rqwMkmympNNpMB1sla2uvurqE2T6elkX9ozMtp7ytDUo8tKJ0slkgLuiGlxsh6rapZBeNeC3S3owFLlaUYDnVlCk38eKLu3O9UVqX17pkdFBG+zqjhdcyWuYooJDawvyCDBNN8TDiKrxgcCkuuo+yNlQSA8Ir6mdF/Y/4GUOJWzEgrwZUiSAI4kZwUCY4KFfjV+wk7sWAvBpQJYIgiDvBQZngoFwD7XoUQZzBgLwaUCWCIIjbceMjrAmCIAiCIAjie8BBmSAIgiAIgiAAOCgTBEEQBEEQBAAHZYIgCIIgCIIA4KBMEARBEARBEAAclAmCIAiCIAgCgIMyQRAEQRAEQQBwUCYIgiAIgiAIgH/TUNKoxFrqhgAAAABJRU5ErkJggg==" alt="" />
这段不知道什么意思。
=======================================================================
Handler Tracking
使用BOOST_ASIO_ENABLE_HANDLER_TRACKING来帮助异步调试。
=======================================================================
Stackless Corutiones
aaarticlea/png;base64,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" alt="" />
协同例程类为非栈式协同例程提供支持。非栈式协同例程允许程序以极小的代价用同步的方式实现异步逻辑。
struct session : boost::asio::coroutine
{
boost::shared_ptr<tcp::socket> socket_;
boost::shared_ptr<std::vector<char> > buffer_; session(boost::shared_ptr<tcp::socket> socket)
: socket_(socket),
buffer_(new std::vector<char>())
{
} void operator()(boost::system::error_code ec = boost::system::error_code(), std::size_t n = )
{
if (!ec) reenter (this)
{
for (;;)
{
yield socket_->async_read_some(boost::asio::buffer(*buffer_), *this);
yield boost::asio::async_write(*socket_, boost::asio::buffer(*buffer_, n), *this);
}
}
}
};
黑科技 看不懂
=======================================================================
Stackful Coroutines
spawn()允许程序用同步的方式实现异步逻辑。
boost::asio::spawn(my_strand, do_echo); // ... void do_echo(boost::asio::yield_context yield)
{
try
{
char data[];
for (;;)
{
std::size_t length =
my_socket.async_read_some(
boost::asio::buffer(data), yield); boost::asio::async_write(my_socket,
boost::asio::buffer(data, length), yield);
}
}
catch (std::exception& e)
{
// ...
}
}
黑科技 看不懂
=======================================================================
TCP,UDP and ICMP
Boost.Asio为TCP、UDP、ICMP提供了现成的支持。听起来很贴心的样子。
使用resolver来进行主机名解析。
通过查找来解析主机名和服务名,然后转换成一个或多个端点。
ip::tcp::resolver resolver(my_io_service);
ip::tcp::resolver::query query("www.boost.org", "http");//参数2可以直接写端口号“80”。
ip::tcp::resolver::iterator iter = resolver.resolve(query);
ip::tcp::resolver::iterator end; // End marker.
while (iter != end)
{
ip::tcp::endpoint endpoint = *iter++;
std::cout << endpoint << std::endl;
}
下面的代码可以对每个端点进行尝试直到能够建立一个连接
(同步的代码)
ip::tcp::socket socket(my_io_service);
boost::asio::connect(socket, resolver.resolve(query));
异步的做法:
boost::asio::async_connect(socket_, iter,boost::bind(&client::handle_connect, this,boost::asio::placeholders::error)); // ... void handle_connect(const error_code& error)
{
if (!error)
{
// Start read or write operations.
}
else
{
// Handle error.
}
}
当一个断电可用时,可以创建或者连接套接字。
ip::tcp::socket socket(my_io_service);
socket.connect(endpoint);
在TCP上,recvive()、async_receive()、send()、async_send是短读短写(short writes or reads),所以通常用下面的这些:
read()、async_read()、write()、async_write。
TCP Servers
ip::tcp::acceptor acceptor(my_io_service, my_endpoint);
...
ip::tcp::socket socket(my_io_service);
acceptor.accept(socket);
UDP
UDP的主机名解析也使用resolver。
ip::udp::resolver resolver(my_io_service);
ip::udp::resolver::query query("localhost", "daytime");
ip::udp::resolver::iterator iter = resolver.resolve(query);
...
UDP套接字通常绑定到本地端点。下面的代码将创建一个IP版本4 UDP套接字并将其绑定到“任意”地址的12345端口。
ip::udp::endpoint endpoint(ip::udp::v4(), );
ip::udp::socket socket(my_io_service, endpoint);
未连接的UDP,使用receive_from()、async_receive_from()、send_to()、async_send_to()。
已连接的UDP,使用receive()、async_receive()、send()、async_send()。
ICMP
ICMP的主机名解析也是用resolver。
ip::icmp::resolver resolver(my_io_service);
ip::icmp::resolver::query query("localhost", "");
ip::icmp::resolver::iterator iter = resolver.resolve(query);
...
一个ICMP可以绑定本地端点。下面的代码将创建一个IP版本6 ICMP套接字并将其绑定到任意地址:
ip::icmp::endpoint endpoint(ip::icmp::v6(), );
ip::icmp::socket socket(my_io_service, endpoint);
使用receive_from()、async_receive_from()、send_to()、async_send_to()。
=======================================================================
其他协议
可以通过下面的协议来扩展。
generic::datagram_protocol
generic::raw_protocol
generic::seq_packet_protocol
generic::stream_protocol
他们可以指定地址协议簇
boost::asio::generic::stream_protocol::socket my_socket(my_io_service);
my_socket.open(boost::asio::generic::stream_protocol(AF_INET,IPPROTO_TCP));
...
端点模板类boost::asio::generic::basic_endpoint支持上述的协议。也能够自动作出转换。
boost::asio::ip::tcp::endpoint my_endpoint1 = ...;
boost::asio::generic::stream_protocol::endpoint my_endpoint2(my_endpoint1);
boost::asio::generic::stream_protocol::socket my_socket(my_io_service);
boost::asio::ip::tcp::endpoint my_endpoint = ...;
my_socket.connect(my_endpoint);
Accepting Generic Sockets
如果类型能够转换的话,可以直接使用。
boost::asio::ip::tcp::acceptor my_acceptor(my_io_service);
...
boost::asio::generic::stream_protocol::socket my_socket(my_io_service);
my_acceptor.accept(my_socket);
=======================================================================
Socket Iostreams
Boost.Asio在socket之上实现了输入输出流。
ip::tcp::iostream stream("www.boost.org", "http");
if (!stream)
{
// Can't connect.
}
io_service ios; ip::tcp::endpoint endpoint(tcp::v4(), );
ip::tcp::acceptor acceptor(ios, endpoint); for (;;)
{
ip::tcp::iostream stream;
acceptor.accept(*stream.rdbuf());
...
}
可以用expires_at()和expires_from_now来给超时设定截止时间。
=======================================================================
The BSD Socket API and Boost.Asio
他们的映射关系
=======================================================================
Timers
长时间运行的IO操作通常需要在限定的时间内完成。截止时间可以是绝对时间,但通常使用相对时间。
异步等待操作使用相对时间的例子:
io_service i;
...
deadline_timer t(i);
t.expires_from_now(boost::posix_time::seconds());
t.wait();
程序在异步等待操作使用相对时间的例子:
void handler(boost::system::error_code ec) { ... }
...
io_service i;
...
deadline_timer t(i);
t.expires_from_now(boost::posix_time::milliseconds());
t.async_wait(handler);
...
i.run();
绝对时间、相对时间
boost::posix_time::time_duration time_until_expiry
= t.expires_from_now();
deadline_timer t2(i);
t2.expires_at(t.expires_at() + boost::posix_time::seconds());
=======================================================================
Serial Ports
Boost.Asio的串口类能够在Windows和Linux上通用。
以stream的形式打开串口。
可以使用read()、async_read()、write()、async_write()、read_until()、async_read_until()。
需要配置9600、N、8、1之类的东西。
=======================================================================
Signal Handling
Boost.Asio通过signal_set来支持信号处理。能用于Windows平台。
void handler(const boost::system::error_code& error,int signal_number)
{
if (!error)
{
// A signal occurred.
}
} ... // Construct a signal set registered for process termination.
boost::asio::signal_set signals(io_service, SIGINT, SIGTERM); // Start an asynchronous wait for one of the signals to occur.
signals.async_wait(handler);
=======================================================================
UNIX Domain Sockets(POSIX)
Stream-Oriented File Descriptors(POSIX)
Fork(POSIX)
=======================================================================
Stream-Oriented HANDLEs
Boost.Asio在Windows上用HANDLE实现了异步读写。这些HANDLE必须支持IO完成端口。
(命名管道支持,匿名管道不支持。)
下面是管道的例子:
HANDLE handle = ::CreateFile(...);
windows::stream_handle pipe(my_io_service, handle);
然后可以使用read()、async_read()、write()、async_write()、read_until()、async_read_until()。
=======================================================================
Random-Access HANDLEs
HANDLE handle = ::CreateFile(...);
windows::random_access_handle file(my_io_service, handle);
短读短写read_some_at()
、async_read_some_at()
、
write_some_at()
、
async_write_some_at()。
持续读写read_at()、async_read_at()、write_at() 、async_write_at()。
=======================================================================
Object HANDLEs
Boost.Asio提供了Windows特定的异步等待操作类,包括从句柄到内核对象的类型。
- Change notification 更改通知
- Console input 控制台输入
- Event 事件
- Memory resource notification 内存资源通知
- Process 处理器?
- Semaphore 信号量
- Thread 线程
- Waitable timer 可等待计时器
例如在事件上执行异步操作
HANDLE handle = ::CreateEvent(...);
windows::object_handle file(my_io_service, handle);
然后可以使用wait()或asyc_wait()来等待,直到内核对象变为有信号状态。
=======================================================================
SSL
Boost.Asio提供了SSL的基本支持。
=======================================================================