求救,IOS程序设置不起TCP_KEEPINTVL

mxzy55560593 2014-08-06 02:08:11
int n=HEARTBEAT_FIRST_TIME;
setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int));

就这两句话,返回-1,errno返回42
网上大家的代码都是SOL_TCP,但是IOS找不到这个,所以我就用的IPPROTO_TCP 但是就不成功了 求救啊求救
...全文
273 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaojunyi3724 2014-08-11
  • 打赏
  • 举报
回复
楼主,虽然我无法为你解答,但是我为你盖楼 没积分问问题了 赏点分吧
hslinux 2014-08-07
  • 打赏
  • 举报
回复
有心跳包,链路就会一直处于活跃状态,这个值设不设都可以
Bannings 2014-08-06
  • 打赏
  • 举报
回复
引用 7 楼 mxzy55560593 的回复:
错误是打断电看errno看出来的~~
这里一般的做法是判断返回值是否为-1,如果是-1的话,调perror函数打印出存放在系统中的错误,你先把调下perror
mxzy55560593 2014-08-06
  • 打赏
  • 举报
回复
错误是打断电看errno看出来的~~
Bannings 2014-08-06
  • 打赏
  • 举报
回复
引用 4 楼 mxzy55560593 的回复:
[quote=引用 2 楼 zhangao0086 的回复:] 系统不是会保留最后一次错误的信息么?你在setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int));这一行下断点,然后在下一行把error打印出来,隔太多行的话,搞不好error会被其他的错误信息覆盖
先谢谢啦 出现错误立马打印的 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
这算是完整代码吧,把上面那些屏蔽了 只开启心跳检测 还是不行哈[/quote] 错误是用perror打印的吗?应该有错误描述啊?
阮小木 2014-08-06
  • 打赏
  • 举报
回复
这个是干嘛用的,,,,
mxzy55560593 2014-08-06
  • 打赏
  • 举报
回复
引用 2 楼 zhangao0086 的回复:
系统不是会保留最后一次错误的信息么?你在setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int));这一行下断点,然后在下一行把error打印出来,隔太多行的话,搞不好error会被其他的错误信息覆盖
先谢谢啦 出现错误立马打印的 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
这算是完整代码吧,把上面那些屏蔽了 只开启心跳检测 还是不行哈
Bannings 2014-08-06
  • 打赏
  • 举报
回复
还有,你有完整的代码吗?你这个是保持长链接,在前面有开启吗?
Bannings 2014-08-06
  • 打赏
  • 举报
回复
系统不是会保留最后一次错误的信息么?你在setsockopt(m_nSocket,IPPROTO_TCP,TCP_KEEPINTVL,&n,sizeof(int));这一行下断点,然后在下一行把error打印出来,隔太多行的话,搞不好error会被其他的错误信息覆盖
咸清 2014-08-06
  • 打赏
  • 举报
回复
为什么不用ASI

29,031

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧