免费注册 查看新帖 |

Chinaunix

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

jni socket 异常的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-09 13:56 |只看该作者 |倒序浏览
程序第一次运行能正常连接到服务器. 并能进行数据传输 . 发命令到服务器请求断开连接 .并关闭socket 后 . 重新连接服务器 . 运行到这段代码 result = select(sk.socket+1,NULL,&writefds,NULL,&tv); 这段代码. 返回0 . 重启模似器后. 第一次能正常运行 . 请大家指点.   



sk.socket = socket(AF_INET,SOCK_STREAM,0);
if(sk.socket == SOCKET_ERROR)
{
return 0;
}
unsigned long ul = 1;
result = ioctl(sk.socket, FIONBIO, &ul); //设置为非阻塞模式
if(result==-1)
{
__android_log_print(ANDROID_LOG_ERROR,"Tag", " ioctl FIONBIO error mark :%d \n", result );
return 0;
}
int error;
result = connect(sk.socket,(struct sockaddr*)&m_DeviceAddr,sizeof(struct sockaddr));
if( result == -1 )
{
if (errno == EINPROGRESS)
{// it is in the connect process
struct timeval tv;
fd_set writefds;
tv.tv_sec = 30;
tv.tv_usec = 0;
FD_ZERO(&writefds);
FD_SET(sk.socket, &writefds);
result = select(sk.socket+1,NULL,&writefds,NULL,&tv);
__android_log_print(ANDROID_LOG_ERROR,"Tag", " select error :%d \n", result );
if(result>0)
{
int len = sizeof(int);
getsockopt(sk.socket, SOL_SOCKET, SO_ERROR, &error, &len);
if(error==0)
{
unsigned long ul = 0;
result = ioctl(sk.socket, FIONBIO, &ul);
if(result==-1)
{
return 0;
}
struct timeval timeout={3,0};//3s

result = setsockopt(sk.socket,SOL_SOCKET,SO_SNDTIMEO,&timeout,sizeof(timeout));
if(result>0||result<0)
{
return 0;
}

result = setsockopt(sk.socket,SOL_SOCKET,SO_RCVTIMEO,&timeout,sizeof(timeout));
if(result>0||result<0)
{
return 0;
}
memset(buf,0,200);
result = ReceiveData(sk.socket,m_DeviceTypeInfo,64,20);
if( result == SOCKET_ERROR)
{
sk.socket = NULL;
return 0;
}
netprotrocolver = *((unsigned long*)m_DeviceTypeInfo+3);
return 1;
}
}
else
{
__android_log_print(ANDROID_LOG_ERROR,"Tag", " error :%d \n", errno );
}
}
else
{
return 0;
}
sk.socket = NULL;
}
return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP