libgo master分支
环境:win10, 编译器:vs 2017,
例子5:sample5_asio.t,
启动就崩溃,堆栈信息:
sample5_asio.t.exe!co::accept_mode_hook<unsigned __int64 (__cdecl*)(unsigned __int64,sockaddr *,int )>(unsigned __int64()(unsigned __int64, sockaddr *, int *) fn, const char * fn_name, unsigned __int64 s, sockaddr * addr, int * addrlen) 行 312 C++
sample5_asio.t.exe!co::hook_accept(unsigned __int64 s, sockaddr * addr, int * addrlen) 行 500 C++
sample5_asio.t.exe!boost::asio::detail::socket_ops::call_accept(int * __formal, unsigned __int64 s, sockaddr * addr, unsigned __int64 * addrlen) 行 96 C++
sample5_asio.t.exe!boost::asio::detail::socket_ops::accept(unsigned __int64 s, sockaddr * addr, unsigned __int64 * addrlen, boost::system::error_code & ec) 行 113 C++
sample5_asio.t.exe!boost::asio::detail::socket_ops::sync_accept(unsigned __int64 s, unsigned char state, sockaddr * addr, unsigned __int64 * addrlen, boost::system::error_code & ec) 行 140 C++
sample5_asio.t.exe!boost::asio::detail::win_iocp_socket_serviceboost::asio::ip::tcp::accept<boost::asio::basic_socketboost::asio::ip::tcp >(boost::asio::detail::win_iocp_socket_serviceboost::asio::ip::tcp::implementation_type & impl, boost::asio::basic_socketboost::asio::ip::tcp & peer, boost::asio::ip::basic_endpointboost::asio::ip::tcp * peer_endpoint, boost::system::error_code & ec) 行 465 C++
sample5_asio.t.exe!boost::asio::basic_socket_acceptorboost::asio::ip::tcp::acceptboost::asio::ip::tcp(boost::asio::basic_socketboost::asio::ip::tcp & peer, void * __formal) 行 1162 C++
sample5_asio.t.exe!echo_server() 行 29 C++
[外部代码]
sample5_asio.t.exe!co::Task::Run::__l2::() 行 38 C++
sample5_asio.t.exe!co::Task::Run() 行 49 C++
sample5_asio.t.exe!co::Task::StaticRun(__int64 vp) 行 80 C++
原因是:boost::asio在accept函数下会endpoint直接传的是空指针,导致在win下面在hook acccept的时候,调用了addr->sa_family, 而这个addr是个nullptr,所以导致崩溃
已完成兼容windows,请试用master分支的最新代码