免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1942 | 回复: 0
打印 上一主题 下一主题

[应用] 应用程序 如何处理网络异常 IPC心跳机制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-03-19 17:25 |只看该作者 |倒序浏览
通过HI3535芯片,想解码IPC的视频数据

测试发现前提是:要定时给IPC发送心(IPC会通过TCP返数据给解码板),IPC才会一直送视频数据过来;


//给 IPC 发送心跳的线程如下:
HI_VOID  TCPConnectCheckThread(HI_VOID *pArgs)
{
while(1)
{
  usleep(100000);//发送心跳的时间间隔
    memset(recvBuf,0,sizeof(recvBuf));
   
    //tcp 此处原为阻塞式模式
      ul = 1;
            ioctl(sockfd, FIONBIO, &ul);//设为非阻塞式           
  sendVal = send(sockfd, HeartBuff, sizeof(HeartBuff), 0);        //发送心跳
  ul = 0;
            ioctl(sockfd, FIONBIO, &ul); //设置为阻塞模式

    if (SOCKET_ERROR == sendVal)        //异常判断
{
  printf("SOCKET_ERROR \n");//此时我认为网线断开,或IPC掉电。。。???这个地方
  if(iTcpConnectFlag != -1)//程序运行前创建了TCPsocket iTcpConnectFlag = 1;那么要先关闭当前TCPscoket之后才能再创建;反之则不需要
  {
          close(sockfd);
    printf(" close(sockfd);\n");
  }
  while(1)
  {      
                iTcpConnectFlag = TcpSockInit(pstSendParam);               
                if(-1 == iTcpConnectFlag)
                {            
             printf(" not connect..\n");
                }else{
   printf("TCP重连成功。。。\n");
             break;
               }  
}
}
  }
}

出现的问题:
1,
当IPC网络连接是正常时,程序运行会进入if (SOCKET_ERROR == sendVal)条件:
不知道这种情况是如何产生?
2,
正确的心跳应该如何发送?
3,
我想实现,对网络异常的正确处理,IPC突然被拔掉网线或掉电等,再重新插上或上电,图像也能正常再显示;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP