无法分配请求的地址 - 可能的原因?

标签 c sockets tcp errno

我有一个由主服务器和分布式从服务器组成的程序。从属服务器向服务器发送状态更新,如果服务器在固定时间内没有收到特定从属服务器的消息,则会将该从属服务器标记为关闭。这种情况一直在发生。

通过检查日志,我发现从站只能向服务器发送一个状态更新,然后永远无法发送另一次更新,总是在调用 connect() 时失败“无法分配请求的地址( 99)。

奇怪的是,从属服务器能够向服务器发送其他几个更新,并且所有连接都发生在同一端口上。造成此故障的最常见原因似乎是连接保持打开状态,但我无法找到任何保持打开状态的内容。还有其他可能的解释吗?

为了澄清,我的连接方式如下:

struct sockaddr *sa; // parameter
size_t           sa_size; //parameter
int              i = 1;
int              stream;

stream = socket(AF_INET,SOCK_STREAM,0);
setsockopt(stream,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
bindresvport(stream,NULL);
connect(stream,sa,sa_size);

此代码位于一个函数中,用于获取与另一台服务器的连接,这 4 个调用中任何一个的失败都会导致该函数失败。

最佳答案

事实证明,问题确实是地址繁忙 - 繁忙是由我们处理网络通信的方式中的其他一些问题引起的。您的意见帮助我解决了这个问题。谢谢。

编辑:具体来说,处理网络通信的问题是,如果第一次失败,这些状态更新将不断重新发送。我们会让每个分布式从站同时尝试发送其状态更新,这只是时间问题,这会使我们的网络过度饱和。

关于无法分配请求的地址 - 可能的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571910/

相关文章:

c - 使用 select() 时,我可以在 readfds 和 writefds 集中添加相同的描述符吗?

android - 我应该使用哪个端口进行 TCP 数据包传输

c - 提示编写可重入求和函数

c - printf 不工作,为什么?

c - 微 Controller 编程中ISR函数中 volatile 关键字的使用

python - 使用Python套接字的RFID(低级命令)

c - 结构数组段错误

Java 套接字第二次写入尝试失败

Python/Twisted - TCP 数据包碎片?

linux - 在 perl 套接字编程中如何从客户端发送数据并从服务器接收数据以及如何获取客户端进程数和客户端 ID?