2014-10-05 73 views
1

运行多个套接字的客户端 - 服务器应用程序的负载在挂载下挂起。分析显示挂在async_connect上的通信线程之一与以下堆栈跟踪:挂载在socket_ops上的async_connect :: socket_select_interrupter中的accept :: open_descriptors

ntdll.dll!ZwWaitForSingleObject() + 0xa bytes 
mswsock.dll!SockWaitForSingleObject() + 0x13c bytes  
mswsock.dll!WSPAccept() + 0x2a3a bytes 
ws2_32.dll!WSAAccept() + 0xaf bytes  
ws2_32.dll!accept() + 0x12 bytes 
boost::asio::detail::socket_select_interrupter::open_descriptors() Line 88 + 0x31 bytes C++ 
boost::asio::detail::select_reactor::select_reactor(boost::asio::io_service & io_service={...}) Line 47 + 0x90 bytes C++ 
boost::asio::detail::service_registry::create<boost::asio::detail::select_reactor>(boost::asio::io_service & owner={...}) Line 81 + 0x1f bytes C++ 
boost::asio::detail::service_registry::do_use_service(const boost::asio::io_service::service::key & key={...}, boost::asio::io_service::service * (boost::asio::io_service &)* factory=0x0000000036cbdda8) Line 123 + 0x6 bytes C++ 
boost::asio::detail::win_iocp_socket_service_base::start_connect_op(boost::asio::detail::win_iocp_socket_service_base::base_implementation_type & impl={...}, boost::asio::detail::reactor_op * op=0x000000002b9cea30, const sockaddr * addr=0x000000002870f5f0, unsigned __int64 addrlen=16) Line 550 + 0x45 bytes C++ 
boost::asio::detail::win_iocp_socket_service<boost::asio::ip::tcp>::async_connect<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,Replication::PTCPChannel,boost::system::error_code const & __ptr64>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<Replication::PTCPChannel> >,boost::arg<1> > > > >(boost::asio::detail::win_iocp_socket_service<boost::asio::ip::tcp>::implementation_type & impl={...}, const boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> & peer_endpoint={...}, boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,Replication::PTCPChannel,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<Replication::PTCPChannel> >,boost::arg<1> > > > * handler=0x000000002b9cea30) Line 497 C++ 
boost::asio::stream_socket_service<boost::asio::ip::tcp>::async_connect<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,Replication::PTCPChannel,boost::system::error_code const & __ptr64>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<Replication::PTCPChannel> >,boost::arg<1> > > > >(boost::asio::detail::win_iocp_socket_service<boost::asio::ip::tcp>::implementation_type & impl={...}, const boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> & peer_endpoint={...}, const boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,Replication::PTCPChannel,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<Replication::PTCPChannel> >,boost::arg<1> > > > & handler={...}) Line 209 C++ 
boost::asio::basic_socket<boost::asio::ip::tcp,boost::asio::stream_socket_service<boost::asio::ip::tcp> >::async_connect<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,Replication::PTCPChannel,boost::system::error_code const & __ptr64>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<Replication::PTCPChannel> >,boost::arg<1> > > > >(const boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> & peer_endpoint={...}, const boost::asio::detail::wrapped_handler<boost::asio::io_service::strand,boost::_bi::bind_t<void,boost::_mfi::mf1<void,Replication::PTCPChannel,boost::system::error_code const &>,boost::_bi::list2<boost::_bi::value<boost::shared_ptr<Replication::PTCPChannel> >,boost::arg<1> > > > & handler={...}) Line 723 C++ 

任何人都可以提出为什么是内部套接字连接挂?挂载发生在负载测试的几个小时后,最终阻塞整个应用程序。 由于这是一个内部套接字(侦听回送IP),任何人都可以解释谁应该连接到它以及何时? asio套接字服务有多少连接到回送端口的内部限制?

在这种情况下是否有关闭挂线的首选方法?

有问题的应用程序是Windows应用程序当前运行onWin2k8R2或Win 2k12 R2,使用的boost版本是1.54。

回答

0

防火墙可能阻止连接到目标端口吗?这是提到的一种可能性in this bug report