This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/DK-TM4C129X:使用 fdPoll()监听

Guru**** 2331900 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/597742/rtos-dk-tm4c129x-listening-with-fdpoll

器件型号:DK-TM4C129X

工具/软件:TI-RTOS

在 NDK 手册中,fdPoll()对数据文件描述符交互进行了很好的描述,但似乎没有说明 fdPoll()如何处理侦听器 FD。  监视侦听器 FD 时 fdPoll()的语义是什么(要指定/检查哪些事件)?  使用 fdPoll()进行收听是否合法?  如果要查找 Pollin,然后尝试 ACCE()以使侦听器 FD 返回该事件,该怎么办?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Leo、

    是的、您可以在侦听套接字上使用 fdPoll。  这就是 NDK 的守护程序功能所做的。

    您可以在函数 守护程序()函数的 ti/ndk/nettools/daemon /daemon.c 中看到此代码。

    套接字设置为侦听第395行:

                   /*如果套接字绑定到 TCP,则开始侦听*/
                   if (dlec[i].s!= invalid_socket && dlec[i].Type!= sock_DGRAM)
                   {
                       if (listen (drec[i].s、drec[i].MaxSpawn)< 0)

    对 fdPoll 的调用大约在第418行:

           /*轮询超时为10秒-尝试获取*/
           /*同步错误*/
           if (fdPoll( pollitem,daemon_MAXRECORD,10000)== socket_error)
               中断;

    如果"一切正常"、则在插槽上调用"接受"、该插槽被确认:

               if (pollitem[i].eventsDetected & Pollin)
               {
                   if (dlec[i].Type == sock_DGRAM)
                   {
                       tsock = dlec[i].s;
                       closeSock = 0;
                   }
                   其他
                   {
                       tsock =接受( dlec[i],0,0);
                       closeSock = 1;
                   }

    Steve