使用zlg/ip的接收任务和UDP任务两个任务,参考zlg的资料建立UDP socket是没问题的,可以ping,UDP收发也ok。需要指出的是,zlg的资料接收缓冲用的是局部变量,如下例1的rec_buffer[1025]。在移植snmp时,因为rec_buffer要被其他snmp函数处理,所以把它定义为全局变量,如例2。rec_buffer只被一个任务使用即TaskD。<br /><br />现在问题是:<br />采用例1 - ping,UDP服务器收发正常;<br />采用例2 - ping正常,用UDP测试工具(即客户端)发一个信息给服务器端,<br /> 此时就出现异常,停止AXD,程序停在:<br />Undefined<br /> B Undefined<br /><br />例1<br />void TaskD (void *pdata) <br />{<br /> uint8 rec_buffer[1025]; //接收缓冲<br /> struct sockaddr servAddr; //用于保存本机IP地址、端口号等信息<br /> struct sockaddr from; //用于保存对方IP地址、端口号等信息<br /> int retStatus; //1-UDP;0-TCP<br /> uint16 fromLen; //用于保存对方sockaddr长度<br />……<br />例2<br />static uint8 rec_buffer[1025]; //定义为全局变量<br />……<br />void TaskD (void *pdata) <br />{<br /> //uint8 rec_buffer[1025]; //接收缓冲<br /> struct sockaddr servAddr; //用于保存本机IP地址、端口号等信息<br /> struct sockaddr from; //用于保存对方IP地址、端口号等信息<br /> int retStatus; //1-UDP;0-TCP<br /> uint16 fromLen; //用于保存对方sockaddr长度<br />……<br /> |
|