【问题标题】:How to let a socket server accept only once [duplicate]如何让套接字服务器只接受一次[重复]
【发布时间】:2018-08-07 07:42:13
【问题描述】:

我真的很头疼。

如果我有很多socket客户端,只有一个socket服务器,我怎样才能让服务器只接受他收到的第一个connect()命令,而其他客户端的所有其他connect()都失败?我在 linux 中使用 C 顺便说一句

我真的很难回答这个问题。换句话说,我怎样才能让客户确认“嘿,这个 ip 的这个端口号正忙,我可能需要尝试另一个。

我的老师告诉我,如果我只是让一个客户端连接到服务器,而另一个客户端最近连接到同一个 ip 相同的端口,我会得到一个超时错误。但是,好吧,我就是找不到错误在哪里。 两个客户端的 connect() 函数都返回 0。

也许我误会了老师的话,但由于程序没有崩溃,函数没有返回负数,它在哪里,我怎么才能找到它?

非常感谢。

【问题讨论】:

  • 呃,只调用一次accept(),成功后关闭监听socket?

标签: c linux


【解决方案1】:

尝试在您的listen() 呼叫中使用值 0 或 1 来表示积压。

我没有尝试过,但是手册页声称额外的连接会出现ECONNREFUSED 错误。

在调用accept 将您的实际套接字连接到第一个客户端后立即关闭侦听器。否则另一个客户端可以排队。

【讨论】:

    猜你喜欢
    • 2015-05-28
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多