0

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

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

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

更多观察结果:- - 当为某些文件打开更多描述符时,问题往往会消失 - 如果我删除 boost::asio 代码,accept 工作得很好

限制:无法共享我的代码

4

2 回答 2

0

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

于 2012-10-28T20:10:28.210 回答
0

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

于 2012-12-27T09:16:06.967 回答