TI论坛
直播中

王桂香

8年用户 221经验值
私信 关注
[问答]

CC3200 sl_Select使用不成功怎么办

ti工程师,你们好:UDP客户端发送数据和接收数据中我使用了sl_Select去等待可发送和可接收事件,代码如下,但是出现的现象是写的sl_Select要等足8秒(我设置就为8秒)才返回,而读的sl_Select就一直都不返回,请问是我使用上存在问题还是其他什么原因呢?谢谢  SlTimeval_t         sel_to;  SlSockAddrIn_t      ipas_addr;  SlFdSet_t           rfds, wfds;  SlSockNonblocking_t enable_option;  int                 i_addr_size, socket_fd = -1, ret;    ipas_addr.sin_family      = SL_AF_INET;  ipas_addr.sin_port        = sl_Htons(PORT);  ipas_addr.sin_addr.s_addr = sl_Htonl(IP);  i_addr_size = sizeof(SlSockAddrIn_t);  socket_fd = sl_Socket(SL_AF_INET, SL_SOCK_DGRAM, 0);  if(socket_fd < 0)[    DO_Printf("sl_Socket call Failure!rn");    goto function_exit;  ]    enable_option.NonblockingEnabled = 0x1;  sl_SetSockOpt(socket_fd, SOL_SOCKET, SL_SO_NONBLOCKING, &enable_option, sizeof(enable_option));    keep_on_send:  sel_to.tv_sec  = 8;  sel_to.tv_usec = 0;  SL_FD_ZERO(&wfds);  SL_FD_SET(socket_fd, &wfds);  ret = sl_Select(socket_fd + 1, 0, &wfds, 0, &sel_to);  if(ret < 0)[    DO_Printf("sl_Select1 call failure!rn");    goto function_exit;  ]else[    if(SL_FD_ISSET(socket_fd, &wfds))[      ret = sl_SendTo(socket_fd, sp + already_len, willbe_len - already_len, 0, (SlSockAddr_t *)&ipas_addr, i_addr_size);      if(ret < 0)[        DO_Printf("sl_SendTo call Failure!rn");        goto function_exit;      ]else[        already_len += ret;        DO_Printf("Send Data Count:%drn", already_len);        if(already_len < willbe_len)[          goto keep_on_send;        ]      ]    ]else[      DO_Printf("Send Data Timeout!rn");      goto function_exit;    ]  ]    DO_Printf("Test Send Finishrn");    keep_on_recv:  SL_FD_ZERO(&rfds);  SL_FD_SET(socket_fd, &rfds);  sel_to.tv_sec  = 8;  sel_to.tv_usec = 0;  ret = sl_Select(socket_fd + 1, &rfds, 0, 0, &sel_to);  if(ret < 0)[    DO_Printf("sl_Select2 call failure!rn");    goto function_exit;  ]else[    if(SL_FD_ISSET(socket_fd, &rfds))[      ret = sl_RecvFrom(socket_fd, sp + already_len, willbe_len - already_len, 0, (SlSockAddr_t *)(&ipas_addr), (SlSocklen_t*)(&i_addr_size));      if(ret < 0)[        if(ret == SL_EAGAIN)[          goto keep_on_recv;        ]        DO_Printf("sll_SendTo call Failure!rn");        goto function_exit;      ]else[        already_len += ret;        if(already_len < willbe_len)[          goto keep_on_recv;        ]      ]    ]else[      DO_Printf("Recv Data Timeout!rn");      goto function_exit;    ]  ]  .....

回帖(5)

张飞雄

2020-5-4 16:43:18
1. 你的读和写都是在一台cc31xx上吗,如果是的话能否合到一个select里面去查询
2. 你读写的fds的时候8秒之后它的返回值是多少呢?
                                                                         如果有答案已经回答了您的问题,请标注为已回答。
Please close your question if it has been solved. 
------------------------------------------------------------------
举报

王桂香

2020-5-4 16:53:49
引用: 一个黄人 发表于 2020-5-4 16:43
1. 你的读和写都是在一台cc31xx上吗,如果是的话能否合到一个select里面去查询
2. 你读写的fds的时候8秒之后它的返回值是多少呢?
                                                                         如果有答案已经回答了您的问题,请标注为已回答。

8秒之后是能读到数据的,也就是fds是有被置位的,现象就是有数据时Select不能马上返回,一定要超时才能,超时返回的fds是正确的
举报

王桂香

2020-5-4 16:59:34
引用: 一个黄人 发表于 2020-5-4 16:43
1. 你的读和写都是在一台cc31xx上吗,如果是的话能否合到一个select里面去查询
2. 你读写的fds的时候8秒之后它的返回值是多少呢?
                                                                         如果有答案已经回答了您的问题,请标注为已回答。

不过这个问题我用其他办法解决了,后来想了下,其实没必要使用select。。。

请您帮我看看另外一个问题吧!就是如何获取CC3200 STA模式下的连接质量.
http://www.deyisupport.com/question_answer/wireless_connectivity/wifi/f/105/t/71209.aspx
举报

张飞雄

2020-5-4 17:09:26
能否分享一下select是遇到了什么问题,怎么解决的,也可以给其他童鞋一些分享。thanks.
关于链接质量的问题,我已经回你了,请参考。
                                                                         如果有答案已经回答了您的问题,请标注为已回答。
Please close your question if it has been solved. 
------------------------------------------------------------------
举报

更多回帖

发帖
×
20
完善资料,
赚取积分