我有一个由主服务器和分布式从服务器组成的程序。从服务器向服务器发送状态更新,如果服务器在固定时间内没有收到特定从服务器的消息,则将该从服务器标记为关闭。这种情况一直在发生。
通过检查日志,我发现从站只能向服务器发送一个状态更新,然后永远无法发送另一个更新,总是在调用 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 个调用中的任何一个失败都会导致该函数失败。