在同一进程(不同的线程)中使用Boost :: asio和本机调用(如accept()(两个TCP套接字))是否存在任何已知问题。我在Debian上使用C ++语言。 我的观察是accept()行为不一致。
在运行流程的特定实例上, 客户能够顺利连接。任意数量的客户端连接顺畅。
在另一个运行进程的实例上,当客户端连接时,接受调用失败,说“无效参数”。当套接字没有正确配置为侦听套接字时,应该会出现这样的错误。一旦出现此错误,所有尝试连接的客户端都会出现相同的错误。唯一的解决方法是再次运行该过程,并希望下次它正常工作。
更多观察: - - 当为某些文件打开更多描述符时,问题往往会消失 - 如果我删除了boost :: asio代码,那么接受绝对正常
限制: 无法分享我的代码
答案 0 :(得分:0)
将Boost.Asio与系统调用(例如accept()
)一起使用没有问题,我已经在几个项目中完成了没有问题。根据您的描述,这对我来说听起来像是未定义的行为。我猜你会泄漏描述符,加倍close()
- 描述符,或者在适当的时候不检查返回码。如果您无法发布代码,请使用valgrind之类的工具来帮助您进行调试。
答案 1 :(得分:0)
我产生了两个不同的线程。之后没问题。