socket 断开自动重连,该怎么处理

socket 断开自动重连
服务器  - 客户端 之间 socket 通信,要做一个断开自动重连的功能。

服务器 -- 客户端 通过 心跳包 检测是否断开, 这个没有问题。


我的问题是:

1: 客户端程序 退出,然后再启动, 然后 创建 socket    然后 connect  ,  但是, 这个时候 服务器一直在运行,并没有 在 accept 阻塞等待。  但 现象是, connect 竟然能连上(为什么?), 但是 该 socket 数据收发 有问题, 然后 就通过心跳包检测到 连接异常。


2:如果服务器 程序退出, 然后启动, 客户端能检测到 连接异常, 客户端代码 会 重新 connect , 理论 上  等到 服务器运行 到 accept  的时候,就能连上, 但是死活连不上。

3: 有没有 类似 一些 细节上的设置, 比如, 重新连接的话, 是先要 close socket  然后重新创建  socket 还是 可以用原来的 socket  


------解决思路----------------------
第一个 只是连接上,但是服务器端并没有接受这个连接,收发数据肯定有问题吧
第二个,先shutdown关闭连接再调用connect试试
第三个,如果上面那个不行,就close再重连,应该可以的
------解决思路----------------------
引用:
Quote: 引用:

第一个 只是连接上,但是服务器端并没有接受这个连接,收发数据肯定有问题吧
第二个,先shutdown关闭连接再调用connect试试
第三个,如果上面那个不行,就close再重连,应该可以的



也就是说 客户端 connect 重连的时候,  服务器 必须到  accept 状态 ,否则就算连上 也不能正常 通信 是吧?

 也许对于操作系统来说没有accept也可以正常建立TCP的连接,但是没有accept,这个连接对程序来说是不可用的