码迷,mamicode.com
首页 > 其他好文 > 详细

socket 断线重连

时间:2015-11-30 23:42:50      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

send发送数据时,发送失败,进行如下重连处理:

if(send(sockfd, serbuf, readlen, 0) < 0)//serbuf中有数据可以发送才会执行这条语句
{
    printf("serial to tcp send msg error: %s(errno: %d)\n", strerror(errno), errno);//服务端断掉,则发送失败。
    //exit(0);
    
    //断线重连        
    sleep(3);        
    close(sockfd);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);//重新创建一个套接子,但描述符可能重复
    if (sockfd == -1) 
    {
        printf("recreate socket Error!!! Error # is %d. Exit!\n", errno);
        exit(-1);
    }
    printf("recreate sockfd is %d\n",sockfd);

    // connect to server
    while (-1 == connect(sockfd,(struct sockaddr *)(&servaddr), sizeof(servaddr))) 
    {
        printf("sockfd reconnect error: %s(errno: %d)\n",strerror(errno),errno);
        sleep(5);
    }                    
}

这样做看似没问题,但实验发现,只要服务器端断线了,执行send函数就会直接退出,根本无法重连。为了解决这个问题需要添加头文件

#include <signal.h>

另外在函数中send之前添加如下语句:

signal(SIGPIPE, SIG_IGN);    // prevent exiting when we send data to closed socket

socket 断线重连

标签:

原文地址:http://www.cnblogs.com/smbx-ztbz/p/5008683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!