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

标签 c sockets tcp errno

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

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

奇怪的是,slave 能够向服务器发送其他几个更新,并且所有连接都发生在同一个端口上。似乎导致此失败的最常见原因是连接处于打开状态,但我找不到任何保持打开状态的东西。还有其他可能的解释吗?

澄清一下,这是我的连接方式:

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/7640619/

相关文章:

tcp - uTorrent 如何在 TCP 和 uTP 之间进行选择?

Powershell AcceptTcpClient() 不能被 Ctrl-C 中断

c - 为什么当计数达到零时我的 while 循环终止?

c++ - 如何在QT中接收正确的UDP数据包?

Java Socket 服务器要点

python - 使用 select 处理多个请求

c - Up-Down 控件比好友高

c - 编译时 mex mxGetDoubles() 函数的问题

将 JPEG 图像转换为黑白图像

java - 当我使用http comet时,如何让tomcat发送tcp keepalive数据包