2012-07-18 22 views
0

我有一个我希望绑定到本地终端的TCP套接字。如何使用升压asio来区分未连接的终端上的繁忙终端

我有2个场景:

  1. 插座连接到本地端点这是不是在使用,而不是等待连接。
  2. 将套接字连接到上一次运行时使用/未正确关闭的本地端点。

我用它来初始化接受器,使用它的构造函数传递io_service和端点,但是当它试图连接到使用的端点时,接受器崩溃了。

acceptor_(io_service_, endpoint) 

我做的下一件事是将构造函数更改为仅获取io_service(承诺套接字不会被打开)。

acceptor_(io_service_) 

我看到asio有一个bind()函数,它将套接字与本地端点绑定。 函数bind()具有一个参数,该参数指示是否发生了错误,但对于上面的两种情形,它都会返回相同的错误。

boost::system::error_code ec; 
acceptor_.bind(endpoint, ec); 

if(ec) 
{ 
    // SOME ERROR NOTIFYING 
// EDIT: error code returned is 10009 
} 

有没有一种方法可以连接到端点并为这类错误获取不同的错误?

+1

你能说出返回的错误是什么吗?至于崩溃,你有没有尝试在调试器中运行它来捕捉崩溃? – 2012-07-18 08:01:05

+0

我将它添加到代码中。关于崩溃的错误是10009. – 2012-07-18 08:03:48

+0

- 调试器发现了它。但接受者在类构造函数初始化列表中初始化。 – 2012-07-18 08:07:51

回答

2

我使用的接受器的套接字确实无效。

根据boost的代码(位于:boost asio implementation),我看到接收io_service和endpoint的构造函数使用来自端点本身的协议打开套接字,然后才将其绑定到接受器。

解决方法是仅使用io_service来初始化接受者,然后打开接受者,然后将端点绑定到它。

感谢您的意见!