|
|
1
25
你需要创建一个新的
然后,什么时候
您看到的错误可能是操作系统在调用
|
|
|
2
7
为了清楚起见,这里是我使用的最后一种方法(但这是基于Bjlaub的回答,所以请给他任何赞成票):
我宣布
然后我修改了我的
注:这个问题最初是在2010问答的,但是如果你现在使用C++ 11或更高版本
|
|
|
3
2
我曾经用boost.asio做过类似的事情。我使用异步方法,因此重新连接通常会让我现有的ip::tcp::socket对象超出作用域,然后为异步连接调用创建一个新的对象。如果异步连接失败,我将使用计时器睡眠一段时间,然后重试。 |
|
|
4
0
我试过close()方法和shutdown方法,它们对我来说都很棘手。close()会抛出一个你需要捕捉的错误,这是一种粗鲁的方式来做你想做的事情:)而shutdown()似乎是最好的方法,但在多线程软件上,我发现它可能很麻烦。所以最好的办法是,正如萨姆所说,让它超出范围。如果套接字是类的成员,您可以1)重新设计以便类使用“connection”对象包装套接字并让其超出范围,或者2)将其包装在智能指针中并重置智能指针。如果你使用Boost,包括共享资源是很便宜的,而且很有魅力。从未有过使用共享资源清理套接字的问题。只是我的经验。 |
|
|
5
0
因为C++ 11,你可以写:
上面创建了socket类型move的本地实例,从socket构造它。 在下一行之前,将销毁未命名的本地实例,使套接字处于“从IO服务新建”状态。 |