1
tcp 연결을 시작하는 간단한 boost :: asio 프로그램을 구현했습니다. 리눅스 (우분투 12.04, 부스트 1_48, gcc 4.6.4), 에서는 완벽하게 작동하지만 Win7 (부스트 1_55, vs2008express)에서는 작동하지 않습니다.boost :: asio :: acceptor가 win7에서 멈 춥니 다.
몇 개 (3 ~ 20 개)의 연결을 수락 한 후 연결이 끊기고 연결을 더 이상 허용하지 않습니다. Windows 보호에 문제가 있습니까? 방화벽과 바이러스 백신을 끕니다.
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
class Session : public boost::enable_shared_from_this<Session>
{
public:
Session(boost::asio::io_service &io_) : tcpSocket(io_)
{
std::cerr << "session ctor" << std::endl;
}
~Session()
{
std::cerr << "session Dtor" << std::endl;
}
boost::asio::ip::tcp::socket& getTcpSocket() { return this->tcpSocket; }
private:
boost::asio::ip::tcp::socket tcpSocket;
};
class Server
{
public:
static const unsigned int defaultPort = 55550;
Server();
void start();
private:
boost::asio::io_service io;
boost::asio::ip::tcp::acceptor acceptor;
void startAccept();
void handleAccept(boost::shared_ptr<Session> s_,
const boost::system::error_code& e_);
};
Server::Server()
: acceptor(io, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), defaultPort))
{
}
void Server::start()
{
this->startAccept();
this->io.run();
}
void Server::startAccept()
{
boost::shared_ptr<Session> s(new Session(io));
acceptor.async_accept(s->getTcpSocket(), boost::bind(&Server::handleAccept,
this, s, boost::asio::placeholders::error));
}
void Server::handleAccept(boost::shared_ptr<Session> s_,
const boost::system::error_code& e_)
{
std::cerr << "handleAccept" << std::endl;
if(e_)
std::cerr << e_ << std::endl;
this->startAccept();
}
int main(int, char**)
{
Server server;
server.start();
}
EDIT : 해결
문제점 여기
참조하기위한 코드이다. 그것은 Cygwin 문제였습니다.