首页 文章

避免C中多个套接字的连接拒绝错误

提问于
浏览
2

只是一个快速的背景 . 我愿意为应用程序的每个线程打开两个套接字 . 主线程有accept()调用来接受TCP连接 . 还有其他三个线程,所有线程都有一个accept() . 问题有时在多线程环境中,客户端尝试在子线程中的服务器的accept调用之前连接,这会导致“连接被拒绝”错误 . 客户端不知道服务器何时准备连接我不希望主线程套接字向客户端发送任何控制信息,如“您现在可以连接到服务器” . 为了避免这种情况,我有两种方法1.在客户端设置最大计数器(尝试)以连接到服务器,然后退出连接拒绝错误 . 2.一个单独的线程,其唯一的功能是接受服务器端的连接,作为除主线程之外的所有线程连接的公共接受函数 .

非常感谢知道是否还有其他办法 . 谢谢

1 回答

  • 1

    连接被拒绝不是因为你打电话接受迟到,这是因为你打电话听得很晚 . 确保在任何连接呼叫之前调用listen(您可以使用strace进行检查) . 这可能要求你在产生任何孩子之前先听 .

    在套接字上调用listen后,传入的连接将排队,直到您调用accept . 在某些时候,尚未接受的连接可能会被丢弃,但这不应该只有2或3个套接字 .

    如果这是unix,你可以使用pipe2或socketpair来创建一对连接的管道/ unix域套接字,代码少得多 . 当然,您需要在生成子线程并将一端传递给子项之前执行此操作 .

相关问题