int n=HEARTBEAT_FIRST_TIME;
    setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int));就这两句话,返回-1,errno返回42
网上大家的代码都是SOL_TCP,但是IOS找不到这个,所以我就用的IPPROTO_TCP   但是就不成功了  求救啊求救

解决方案 »

  1.   

    为什么不用ASI
      

  2.   

    系统不是会保留最后一次错误的信息么?你在setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int));这一行下断点,然后在下一行把error打印出来,隔太多行的话,搞不好error会被其他的错误信息覆盖
      

  3.   


    先谢谢啦
    出现错误立马打印的 errno是42
    完整代码是:int m_nSocket=socket(AF_INET,SOCK_STREAM,0); //强制关闭
        linger Linger;
    Linger.l_onoff=1;
    Linger.l_linger=0;
    setsockopt(m_nSocket,SOL_SOCKET,SO_LINGER,(const char *)&Linger,sizeof(Linger));
        
        //复用端口
    int bReuseAddr=1;
    setsockopt(m_nSocket,SOL_SOCKET,SO_REUSEADDR,(const char *)&bReuseAddr,sizeof(int));
        
    //Nagle算法
    int bNoDelay=1;
        if(setsockopt(m_nSocket,IPPROTO_TCP,TCP_NODELAY,(const char *)&bNoDelay,sizeof(int))!=0)
           throw("TCP_NODELAY ERROR");
        
    //开启心跳检测
    int bKeepAlive=1;
    setsockopt(m_nSocket,SOL_SOCKET,SO_KEEPALIVE,(char*)&bKeepAlive,sizeof(int));        int n=HEARTBEAT_FIRST_TIME;
            setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int));  //这里返回-1,errno是42
    这算是完整代码吧,把上面那些屏蔽了 只开启心跳检测 还是不行哈
      

  4.   


    先谢谢啦
    出现错误立马打印的 errno是42
    完整代码是:int m_nSocket=socket(AF_INET,SOCK_STREAM,0); //强制关闭
        linger Linger;
    Linger.l_onoff=1;
    Linger.l_linger=0;
    setsockopt(m_nSocket,SOL_SOCKET,SO_LINGER,(const char *)&Linger,sizeof(Linger));
        
        //复用端口
    int bReuseAddr=1;
    setsockopt(m_nSocket,SOL_SOCKET,SO_REUSEADDR,(const char *)&bReuseAddr,sizeof(int));
        
    //Nagle算法
    int bNoDelay=1;
        if(setsockopt(m_nSocket,IPPROTO_TCP,TCP_NODELAY,(const char *)&bNoDelay,sizeof(int))!=0)
           throw("TCP_NODELAY ERROR");
        
    //开启心跳检测
    int bKeepAlive=1;
    setsockopt(m_nSocket,SOL_SOCKET,SO_KEEPALIVE,(char*)&bKeepAlive,sizeof(int));        int n=HEARTBEAT_FIRST_TIME;
            setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int));  //这里返回-1,errno是42
    这算是完整代码吧,把上面那些屏蔽了 只开启心跳检测 还是不行哈
    错误是用perror打印的吗?应该有错误描述啊?
      

  5.   

    错误是打断电看errno看出来的~~
      

  6.   

    这里一般的做法是判断返回值是否为-1,如果是-1的话,调perror函数打印出存放在系统中的错误,你先把调下perror