记一个有必要记录下来的编程思想
前言 今天在工作中发现了一个觉得有必要记录下来的东西。 正文 需求是这样的:一个网络编程,客户端需要连接并登录服务器,如果未登录或连接断开,需要重新登录。但两次登录或者说两次连接之间需要有一定的时间间隔,来保证创建的socket被完全释放(close(sockfd)函数在关闭socket之后,内核并不会立即释放该套接字,需过一段时间才会从内核中释放掉)。 我的代码最开始是这样写的: if (client->status != STATUS_LOGINED) { if (tmnow - tm_lastconnected < RECONNECT_INTERVAL) { continue; } // 向服务端发起连接 connect(); if (failed) return; // 向服务端发送登录连接报文 send_logined(); } 乍一看,代码逻辑是没有问题的,但放在实际生产上运行之后,就出现问题了。首先,因为有登录,所以服务端跟客户端之间需要使用心跳来获知对方运行情况。而client->status状态的改变,并不是发送登录报文之后....