各位好,我现在用Linux 的API实现客户端,现在实现断线重连这个功能。
现在的一个做法是:收发分开,用三个线程,一个线程收,一个线程发,一个线程定时发送心跳。在操作系统API recv && send出错时发起重连,超时时做重连,代码示例如下:
recvThread:
while(_is_running)
{
int rc = recv(....);
if(rc == -1)
{
if(errno == EINTR || errno == EAGAIN)
continue;
else
reconnect();
}
}
sendThread:
while(_is_running)
{
int rc = send(....);
if(rc == -1)
{
if(errno == EINTR || errno == EAGAIN)
continue;
else
reconnect();
}
}
heartBeatThread:
while(_is_running)
{
if(心跳超时)
reconnect()
sendHb();//也是通过发送线程发送的
sleep(10);
}
void reconnect()
{
close(fd)
connect(fd);
}
这样有一个问题时reconnect是在三个线程中都会调用的,这样当出现断线时,岂不是三个线程都可能执行,还可能执行多次,没这方面经验,求大佬指点一下,或者讲解一下一般断线重连都是怎么做de