找回密码
 注册
搜索
查看: 1024|回复: 11

[讨论] SOCKET 高手进来看看

[复制链接]
发表于 2010-9-19 09:29:01 | 显示全部楼层 |阅读模式
本人在MTK6225 0852上面做了个SOCKET应用,CMNET通信,现发现用神州行的卡可以正常通信,可是插上动感地带的卡一连接机器就白屏重启,希望高手指点一二。
动感地带的卡连接时也是返回SOC_WOULDBLOCK,不同的是MY_socket_notify函数没有反应。甚是不解啊 !


kal_int8 MYsocket_entry()
{
         kal_uint8 val=KAL_TRUE;
         kal_int8 soc_ret;
         //kal_int8 soc_id;
         soc_id = soc_create(PF_INET, SOCK_STREAM, 0, MOD_MMI, APN_id);   //14); //TPC_ACCOUNT_ID);
        //uart_write(soc_id);
         if( soc_id < 0)
         {
           //  uart_write(0x01);
                  return 0;
         }
         
         val=SOC_READ | SOC_WRITE | SOC_CLOSE | SOC_CONNECT;
         if(soc_setsockopt(soc_id, SOC_ASYNC, &val, sizeof(val)) <0)
         {
           //uart_write(0x03);
          return 0;
         }
         
         val=1;
         if(soc_setsockopt(soc_id, SOC_NBIO, &val, sizeof(val)) <0)
         {
          // uart_write(0x02);
          return 0;
         }


         memset( &CL7202E_ip_addr, 0, sizeof(sockaddr_struct));

         MY_ip_addr.addr[0] = IP_Address[0]; //10;
         MYip_addr.addr[1] = IP_Address[1]; //0;
         MY_ip_addr.addr[2] = IP_Address[2];//0;
         MY_ip_addr.addr[3] = IP_Address[3];; //172;
         MY_ip_addr.addr_len = 4;
         MY_ip_addr.port = IP_PortNo;

         MY_ip_addr.sock_type = SOCK_STREAM;
        // uart_write(0x1A);                 
         soc_ret = soc_connect(soc_id, &CL7202E_ip_addr);
        // uart_write(soc_ret);
        //uart_write(0x1B);
         
         if( soc_ret >= 0)
         {
                //  uart_write(0x04);
               
                  return soc_ret;
         }else if( soc_ret == SOC_WOULDBLOCK) /* 一般此条件都会成立,返回! */
         {
                  //Jx_debug("SOC_WOULDBLOCK!!!\\r\\n");
                   uart_write(0x05);
                  SetProtocolEventHandler(MY_socket_notify, MSG_ID_APP_SOC_NOTIFY_IND);
                  return soc_ret;
         }
         else
         {
                    soc_close(soc_id);
         }
         return 0;
}



着急啊 !
发表于 2010-9-21 14:07:23 | 显示全部楼层
抓抓trace吧...
点评回复

使用道具 举报

发表于 2010-9-21 08:57:28 | 显示全部楼层
搞个log看看
点评回复

使用道具 举报

 楼主| 发表于 2010-9-20 17:26:33 | 显示全部楼层
我这边的现象是我的动感地带的卡不管连接移动服务器还是连接我们这边的服务器都重启啊 ,100%出现。试用了几张同事的神州行通讯没有问题。然后动感地带的话有的卡正常,有的卡一连接就重启。实在不知道什么原因啊!
点评回复

使用道具 举报

发表于 2010-9-20 14:01:08 | 显示全部楼层
[em10][em10]我们服务器是用asp.net写的,就只有和移动的unix的服务器连接出现这样的问题,和电信的服务器连接就没有问题.
点评回复

使用道具 举报

 楼主| 发表于 2010-9-20 09:00:16 | 显示全部楼层
继续关注!
点评回复

使用道具 举报

发表于 2010-9-19 14:45:26 | 显示全部楼层
但不是每次都会死机,只是偶尔的出现,100次大概出现一次访问时,移动网关和服务器连接建立后,服务器自动断开连接
点评回复

使用道具 举报

发表于 2010-9-19 14:42:09 | 显示全部楼层
我遇到过这样的问题,你去找写服务器的,看看这次访问的连接问题...服务器那边有LOG
点评回复

使用道具 举报

 楼主| 发表于 2010-9-19 14:39:17 | 显示全部楼层
现在的问题是
else if( soc_ret == SOC_WOULDBLOCK) /* 一般此条件都会成立,返回! */
  {
     uart_write(0x05);
    SetProtocolEventHandler(MY_socket_notify, MSG_ID_APP_SOC_NOTIFY_IND);
    return soc_ret;
  }
一走到else if( soc_ret == SOC_WOULDBLOCK)立马就白屏重启,我的MY_socket_notify函数里面的打印信息没有抓到,说明该函数没有进去。其他的可以通信的卡也会走到这里,但是会进入钩子函数等待SOC_CONECT消息。

期待高手解答!
点评回复

使用道具 举报

发表于 2010-9-19 14:25:51 | 显示全部楼层
你看一下cmnet,cmwap的区别,有些卡开通的上网服务不一样.
至于重启的问题,则要看你的消息处理,以及和服务器建立连接的问题
点评回复

使用道具 举报

 楼主| 发表于 2010-9-19 14:14:19 | 显示全部楼层
发现也不是所有的动感地带卡都不能连上,难道是卡没有开通GPRS?再咋的也不至于重启啊?莫名奇妙!
点评回复

使用道具 举报

 楼主| 发表于 2010-9-19 09:31:30 | 显示全部楼层
自己先顶个![em13]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-2-26 20:11 , Processed in 0.047790 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表