在同一进程中使用boost :: asio和本机套接字调用

时间:2012-10-27 20:43:35

标签: c++ sockets boost boost-asio

在同一进程(不同的线程)中使用Boost :: asio和本机调用(如accept()(两个TCP套接字))是否存在任何已知问题。我在Debian上使用C ++语言。 我的观察是accept()行为不一致。

在运行流程的特定实例上, 客户能够顺利连接。任意数量的客户端连接顺畅。

在另一个运行进程的实例上,当客户端连接时,接受调用失败,说“无效参数”。当套接字没有正确配置为侦听套接字时,应该会出现这样的错误。一旦出现此错误,所有尝试连接的客户端都会出现相同的错误。唯一的解决方法是再次运行该过程,并希望下次它正常工作。

更多观察: - - 当为某些文件打开更多描述符时,问题往往会消失 - 如果我删除了boost :: asio代码,那么接受绝对正常

限制: 无法分享我的代码

2 个答案:

答案 0 :(得分:0)

将Boost.Asio与系统调用(例如accept())一起使用没有问题,我已经在几个项目中完成了没有问题。根据您的描述,这对我来说听起来像是未定义的行为。我猜你会泄漏描述符,加倍close() - 描述符,或者在适当的时候不检查返回码。如果您无法发布代码,请使用valgrind之类的工具来帮助您进行调试。

答案 1 :(得分:0)

我产生了两个不同的线程。之后没问题。