- 论坛徽章:
- 7
|
本帖最后由 cxytz01 于 2013-08-27 12:28 编辑
以前写的,心跳发送端。- int keep_alive(int fd) {
- static time_t cur_t, pre_t;
- static int send_flag;
- static char s_heart[HEART_LEN], s_send_msg[BUF_LEN];
- static long n, l_snd_len;
- static fd_set alive_wset;
- FD_ZERO(&alive_wset);
- FD_SET(fd, &alive_wset);
- cur_t = time(NULL);
- if (cur_t % HEARTBEAT_T >= 0 && cur_t % HEARTBEAT_T <= (MAX_HEART - HEARTBEAT_T) && send_flag == 0) { /* 如果在180s~300s之内>,且没有发送过一次心跳,则发送。 心跳报文的发送不依赖定时器,而是使用时间取模,HEARTBEAT_T 是一个宏:时间间隔*/
- memset(s_heart, 0, HEART_LEN);
- memset(s_send_msg, 0, BUF_LEN);
- l_snd_len = 0L;
- n = 0;
- heart_beat(s_heart); /* 构建心跳报文 */
- Write_m_h(fd, s_send_msg, l_snd_len, &alive_wset); /* 发送心跳报文 */
- debug_msg(LOG_INFO, "send_simplex: sended s_heart at [%d]", cur_t);
- send_flag = 1;
- pre_t = cur_t;
- } else if (cur_t - pre_t >= HEARTBEAT_T) send_flag = 0;
- return 0;
- }
复制代码 |
|