select on WIN32 using has some problem

This commit is contained in:
zsx 2015-03-11 09:09:28 +08:00
parent fe1431b3c7
commit db6f622a7a
7 changed files with 310 additions and 4 deletions

View File

@ -420,6 +420,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "redis_cluster", "lib_acl_cp
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "master_threads", "lib_acl_cpp\samples\master\master_threads\master_threads_vc2012.vcxproj", "{CD9495C6-83D7-4273-A2B7-6217B67D8999}"
ProjectSection(ProjectDependencies) = postProject
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@ -1424,6 +1431,21 @@ Global
{814E8FCD-38B1-4CC2-A37D-A77A993D918D}.Template|Win32.ActiveCfg = DebugDll|Win32
{814E8FCD-38B1-4CC2-A37D-A77A993D918D}.Template|Win32.Build.0 = DebugDll|Win32
{814E8FCD-38B1-4CC2-A37D-A77A993D918D}.Template|x64.ActiveCfg = DebugDll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Debug|Win32.ActiveCfg = Debug|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Debug|Win32.Build.0 = Debug|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Debug|x64.ActiveCfg = Debug|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.DebugDll|Win32.Build.0 = DebugDll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.DebugDll|x64.ActiveCfg = DebugDll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Release|Win32.ActiveCfg = Release|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Release|Win32.Build.0 = Release|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Release|x64.ActiveCfg = Release|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Releasedll|Win32.ActiveCfg = Releasedll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Releasedll|Win32.Build.0 = Releasedll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Releasedll|x64.ActiveCfg = Releasedll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Template|Win32.ActiveCfg = DebugDll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Template|Win32.Build.0 = DebugDll|Win32
{CD9495C6-83D7-4273-A2B7-6217B67D8999}.Template|x64.ActiveCfg = DebugDll|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1471,6 +1493,7 @@ Global
{2F6EDD90-FE9E-4D1F-B2FE-7FED6805B1D4} = {37A14D60-8196-4BCA-9B1A-48302446AFAF}
{946DAF94-90C7-44F9-B24B-6B8F105A84EF} = {37A14D60-8196-4BCA-9B1A-48302446AFAF}
{DE0F9993-7821-4659-B1C2-3A24DE292E87} = {37A14D60-8196-4BCA-9B1A-48302446AFAF}
{CD9495C6-83D7-4273-A2B7-6217B67D8999} = {37A14D60-8196-4BCA-9B1A-48302446AFAF}
{9F6E3633-E3EB-4DD0-8B53-0013EAB5E532} = {BE48C8C9-2F6D-450B-9D42-4666E9257C8A}
{572249B2-7EE6-41D8-97CE-6FA98BDCF412} = {BE48C8C9-2F6D-450B-9D42-4666E9257C8A}
{8A5563B4-C546-46D0-9C64-D051CA29F164} = {2AAD256A-E891-4CFA-BA5F-70DDA2CC63AE}

View File

@ -1,6 +1,12 @@
修改历史列表:
------------------------------------------------------------------------
486) 2015.3.11
486.1) bugfix: 修改 acl_read_wait.c/acl_write_wait.c 在 WIN32 平台下调用
select 时不必检查 fd 与 FD_SETSIZE 的关系,因为 WIN32 下的 fd_set 结构定义及
FD_XXX 宏的实现原理与 UNIX 不同,并且 WIN32 下的 fd 是不连续的,有可能会出现非常大
的值,所以其中检查 fd < FD_SETSIZE 有可能会导致崩溃,其实也完全没有必要检查
485) 2015.3.5
485.1) bugfix: acl_threads_server.c/acl_aio_server.c 当进程退出时,需要通知
acl_master 主进程自己当前不可用,同时需要关闭与前端 TCP 派发器(master_dispatch)的连接

View File

@ -59,6 +59,75 @@ int acl_read_wait(ACL_SOCKET fd, int timeout)
}
}
#elif defined(WIN32_XX)
static HANDLE __handle = NULL;
int acl_read_wait(ACL_SOCKET fd, int timeout)
{
const char *myname = "acl_read_wait";
OVERLAPPED *overlapped, *lpOverlapped;
DWORD recvBytes;
BOOL isSuccess;
ACL_SOCKET fd2;
DWORD bytesTransferred = 0;
DWORD delay = timeout * 1000;
HANDLE h2;
if (__handle == NULL)
__handle = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
NULL, 0, 0);
if (__handle == NULL) {
acl_msg_error("CreateIoCompletionPort: %s",
acl_last_serror());
return -1;
}
overlapped = acl_mycalloc(1, sizeof(OVERLAPPED));
h2 = CreateIoCompletionPort((HANDLE) fd, __handle,
(DWORD) overlapped, 0);
if (h2 == NULL)
acl_myfree(overlapped);
else if (h2 != __handle) {
acl_msg_error("invalid h2 by CreateIoCompletionPort: %s",
acl_last_serror());
CloseHandle(h2);
return -1;
}
if (ReadFile((HANDLE) fd, NULL, 0, &recvBytes, overlapped) == FALSE
&& acl_last_error() != ERROR_IO_PENDING)
{
acl_msg_warn("%s(%d): ReadFile error(%s)",
myname, __LINE__, acl_last_serror());
return -1;
}
delay = 6000;
while (1)
{
isSuccess = GetQueuedCompletionStatus(__handle,
&bytesTransferred,
(DWORD*) &fd2,
(OVERLAPPED**) &lpOverlapped,
delay);
if (lpOverlapped == NULL)
break;
if (HasOverlappedIoCompleted(lpOverlapped))
acl_myfree(lpOverlapped);
if (isSuccess)
return 0;
//delay = 0;
}
acl_msg_warn("timeout error: %s", acl_last_serror());
return -1;
}
#else
int acl_read_wait(ACL_SOCKET fd, int timeout)
@ -70,12 +139,14 @@ int acl_read_wait(ACL_SOCKET fd, int timeout)
int errnum;
/*
* Sanity checks.
*/
* Sanity checks.
*/
#ifndef WIN32
if (FD_SETSIZE <= (unsigned) fd)
acl_msg_fatal("%s(%d), %s: descriptor %d does not fit "
"FD_SETSIZE %d", __FILE__, __LINE__, myname,
(int) fd, FD_SETSIZE);
#endif
/*
* Guard the write() with select() so we do not depend on alarm()
@ -98,7 +169,11 @@ int acl_read_wait(ACL_SOCKET fd, int timeout)
acl_set_error(0);
for (;;) {
#ifdef WIN32
switch (select(1, &rfds, (fd_set *) 0, &xfds, tp)) {
#else
switch (select(fd + 1, &rfds, (fd_set *) 0, &xfds, tp)) {
#endif
case -1:
errnum = acl_last_error();
#ifdef WIN32

View File

@ -76,6 +76,7 @@ int acl_write_wait(ACL_SOCKET fd, int timeout)
struct timeval *tp;
int errnum;
#ifndef WIN32
/*
* Sanity checks.
*/
@ -83,6 +84,7 @@ int acl_write_wait(ACL_SOCKET fd, int timeout)
acl_msg_fatal("%s, %s(%d): descriptor %d does not fit "
"FD_SETSIZE %d", myname, __FILE__, __LINE__,
(int) fd, FD_SETSIZE);
#endif
/*
* Guard the write() with select() so we do not depend on alarm()
@ -105,7 +107,11 @@ int acl_write_wait(ACL_SOCKET fd, int timeout)
acl_set_error(0);
for (;;) {
#ifdef WIN32
switch (select(1, (fd_set *) 0, &wfds, &xfds, tp)) {
#else
switch (select(fd + 1, (fd_set *) 0, &wfds, &xfds, tp)) {
#endif
case -1:
errnum = acl_last_error();
#ifdef WIN32

View File

@ -182,6 +182,7 @@ protected:
// 要求关闭该客户端连接
virtual bool thread_on_accept(acl::socket_stream* stream)
{
stream->set_rw_timeout(2);
format("accept one client, peer: %s, local: %s, var_cfg_io_timeout: %d\r\n",
stream->get_peer(), stream->get_local(), var_cfg_io_timeout);
if (stream->format("hello, you're welcome!\r\n") == -1)
@ -256,9 +257,10 @@ int main(int argc, char* argv[])
if (argc >= 2 && strcmp(argv[1], "alone") == 0)
{
int task_count = 2, threads_count = 2;
int task_count = 20, threads_count = 2;
format = (void (*)(const char*, ...)) printf;
format("listen: 127.0.0.1:8888\r\n");
acl::log::stdout_open(true);
// 单独运行方式
if (argc >= 3)

View File

@ -0,0 +1,194 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="DebugDll|Win32">
<Configuration>DebugDll</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Releasedll|Win32">
<Configuration>Releasedll</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{CD9495C6-83D7-4273-A2B7-6217B67D8999}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<ProjectName>master_threads</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'">$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'">$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'">true</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\..\include;..\..\..\..\lib_acl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;lib_acl_vc2012d.lib;lib_acl_cpp_vc2012d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)master_threads.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\..\..\lib\win32;..\..\..\..\dist\lib\win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)master_threads.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
<IgnoreSpecificDefaultLibraries>
</IgnoreSpecificDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\..\include;..\..\..\..\lib_acl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;lib_acl_vc2012.lib;lib_acl_cpp_vc2012.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)master_threads.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\..\lib;..\..\..\..\dist\lib\win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
<IgnoreSpecificDefaultLibraries>
</IgnoreSpecificDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDll|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\..\include;..\..\..\..\lib_acl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;ACL_CPP_DLL;ACL_DLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;lib_acl_d.lib;lib_acl_cpp_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)master_threads.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\..\lib;..\..\..\..\dist\lib\win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)master_threads.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Releasedll|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\..\include;..\..\..\..\lib_acl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;ACL_CPP_DLL;ACL_DLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;wsock32.lib;lib_acl.lib;lib_acl_cpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)master_threads.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\..\lib;..\..\..\..\dist\lib\win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)master_threads.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="master_threads.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -19,7 +19,7 @@ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=270070
12) http 中的 WEB 编程模块应该支持 FCGI 模式
13) session 应该增加一个 session_pool
14) 整合 thrift/buffer 协议到 acl_master 服务器框架中
15) 应支持 redis 客户端协议
15) 应支持 redis 客户端协议 -- 完成
16) 能支持 mysql 协议到 mongodb 协议的转换协议实现
17) HttpServlet 支持 FCGI
18) mime 解析库针对 7BIT 格式兼容性支持