一个socket不能调用回调函数的问题

codelabs 2010-01-06 06:45:54
我自己在MTK23上写的的部分代码,在连接网络的时候 并没有执行到返回的回调函数。然后机子在每连接一次网络的时候重启。得到满意答案100分相送。
	S32  ret = 0;
kal_int8 soc_ret = 0;
#ifndef __MTK_TARGET__
int addrlen = 0;
#endif
g_xtl_socket_cntx.conn_counter = g_xtl_socket_cntx.conn_counter + 1;
if (g_xtl_socket_cntx.conn_counter > 5)
{
return FALSE; //连接5次不成功就退出
}
#ifdef __MTK_TARGET__
ret = soc_connect((S8)g_xtl_socket_cntx.socket_id,&g_xtl_destaddr);
#else
//ret = -1;
ret = soc_connect((S8)g_xtl_socket_cntx.socket_id,&g_xtl_destaddr);
#endif
if(ret >= SOC_SUCCESS)
{
g_xtl_socket_cntx.state = REQ_SENT_STATE;
result = XtlStartSocketRequest();
return TRUE;
}
else if(ret == SOC_WOULDBLOCK)
{

SetProtocolEventHandler(xtl_soc_app_socket_notify, MSG_ID_APP_SOC_NOTIFY_IND); return TRUE;
}
else
{

return FALSE;
}
...全文
341 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jernymy 2010-01-07
  • 打赏
  • 举报
回复
期待
cattycat 2010-01-07
  • 打赏
  • 举报
回复
建议看SetProtocolEventHandler用法。
cattycat 2010-01-07
  • 打赏
  • 举报
回复
SetProtocolEventHandler设置回调函数应该在开始就设置,是不是在InitializeAll()中设置的呢,等到超时事件发生时会自动调用你设置的回调函数。
codelabs 2010-01-07
  • 打赏
  • 举报
回复
写错了上面不好意思:
我用打印出来跟着发现返回的 ret = -2;
程序进入了
else if(ret == SOC_WOULDBLOCK)
{
SetProtocolEventHandler(xtl_soc_app_socket_notify, MSG_ID_APP_SOC_NOTIFY_IND);
return TRUE;
}


接着就跳出了函数。

C版的高手快解决下啊
codelabs 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hbvanguard 的回复:]
C/C++ code
#ifdef __MTK_TARGET__
ret= soc_connect((S8)g_xtl_socket_cntx.socket_id,&g_xtl_destaddr);//你这个条件编译不起作用#else//ret = -1; ret= soc_connect((S8)g_xtl_socket_cntx.socket_id,&g_xtl_destaddr?-
[/Quote]

我用打印出来跟着发现返回的 ret = -2;
并且程序进入了
if(ret >= SOC_SUCCESS)
{
g_xtl_socket_cntx.state = REQ_SENT_STATE;
result = XtlStartSocketRequest();
return TRUE;
}
else

接着就跳出了函数。

C版的高手快解决下啊
fire123cba 2010-01-06
  • 打赏
  • 举报
回复
学习了
Steven_0610 2010-01-06
  • 打赏
  • 举报
回复
up
cattycat 2010-01-06
  • 打赏
  • 举报
回复
SetProtocolEventHandler应该之前就设定,等到SOC_WOULDBLOCK发生的时候会自动调用xtl_soc_app_socket_notify吧。linux的sigaction就是这样的,而不是你发生SOC_WOULDBLOCK才去设置处理函数。另外你的ret值是什么,connect是不是成功,返回值具体是啥。
hbvanguard 2010-01-06
  • 打赏
  • 举报
回复

#ifdef __MTK_TARGET__
ret = soc_connect((S8)g_xtl_socket_cntx.socket_id,&g_xtl_destaddr);//你这个条件编译不起作用
#else
//ret = -1;
ret = soc_connect((S8)g_xtl_socket_cntx.socket_id,&g_xtl_destaddr);//这句和上句完全相同,
//为什么要用条件编译?
#endif
if(ret >= SOC_SUCCESS)
{
g_xtl_socket_cntx.state = REQ_SENT_STATE;
result = XtlStartSocketRequest();
return TRUE;
}
else if(ret == SOC_WOULDBLOCK)//回调xtl_soc_app_socket_notify没有执行,说明ret值
// 不等于SOC_WOULDBLOCK,所以请你检查上面的ret返回值
//你两次调用soc_connect参数都相同,却用了条件编译,
//应该是有问题,是不是第二次调用soc_connect的时候参数写错了,我怀疑
{
SetProtocolEventHandler(xtl_soc_app_socket_notify, MSG_ID_APP_SOC_NOTIFY_IND);
return TRUE;
}
else
{
return FALSE;
}
javahuazai 2010-01-06
  • 打赏
  • 举报
回复
c 的看不太懂
codelabs 2010-01-06
  • 打赏
  • 举报
回复
SetProtocolEventHandler(xtl_soc_app_socket_notify, MSG_ID_APP_SOC_NOTIFY_IND); [/color]
也就是这句没起到作用

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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