मेरे पास एक बूस्ट :: एएसओ आधारित सर्वर है जो ठीक काम करता है, सिवाय इसके कि मैं एक चेक जोड़ने की कोशिश कर रहा हूं कि एक ही बंदरगाह पर कनेक्शन स्वीकार नहीं कर रहा है। यदि मैं दो सर्वर बना देता हूं, तो उनमें से एक लगातार कनेक्शन स्वीकार करता है, लेकिन दूसरा किसी भी त्रुटि की रिपोर्ट नहीं करता है (दोनों में से प्रत्येक कनेक्शन यादृच्छिक प्रतीत होता है)।boost :: asio server - सर्वर पोर्ट को सुनने में विफलता का पता लगाएं
सर्वर वर्ग के प्रासंगिक बिट (यह जो बनाने के लिए कनेक्शन प्रकार के लिए) एक आधार वर्ग और typedefs जो स्वीकार कर लिया है (का उपयोग करता है एक टेम्पलेट है) कर रहे हैं:
MessageServer (boost::asio::io_service &io, unsigned short port_num)
: BaseServerType (io), acceptor_ (io, boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4(), port_num)) {
Listen();
}
void Listen() {
boost::system::error_code ec;
acceptor_.listen (boost::asio::socket_base::max_connections, ec);
if (!ec) {
start_accept();
} else {
// not reached even if a separate process
// is already listening to that port
connection_pointer new_connection;
BaseServerType::Accepted (new_connection);
}
}
private:
void start_accept() {
connection_pointer new_connection (CreateConnection (acceptor_.io_service()));
acceptor_.async_accept (new_connection -> Socket(),
boost::bind (&MessageServer::handle_accept, this, new_connection,
boost::asio::placeholders::error));
}
void handle_accept (connection_pointer new_connection, const boost::system::error_code &error) {
if (!error) {
BaseServerType::Accepted (new_connection);
new_connection -> Start();
start_accept();
} else {
// never reached
new_connection.reset();
BaseServerType::Accepted (new_connection);
}
}
boost::asio::ip::tcp::acceptor acceptor_;
acceptor.listen() नहीं करता है ' या तो फेंक नहीं।
बूस्ट :: एएसओ में रिपोर्ट किए गए सर्वर पोर्ट को सुनने में विफलता कैसी है?
यदि मैं ऊपर वर्ण का अनुवाद करता हूं, तो यहां कोड है। संदेश सर्वर (boost :: asio :: io_service & io, हस्ताक्षरित लघु पोर्ट_num) : बेससेवर टाइप (io) , स्वीकार्य_ (io, boost :: asio :: ip :: tcp :: endpoint (boost :: asio :: ip: : टीसीपी :: v4(), port_num, झूठा)) { सुनो(); } ... कोशिश करें { सर्वर = नया संदेश सर्वर (io_service_, 5000); } पकड़ें (std :: अपवाद कॉन्स और पूर्व) { printf ("बाध्य त्रुटि:% s \ n", ex.what()); } – Hill