2

FreeRTOS で LwIP を使用しています。私のプロジェクトは、この URL FreeRTOS with LwIP projectの例に基づいています。また、LPCXpresso バージョン 6 で LPC1769 を使用しています。CMSIS バージョン 2。

LwIP を使用して、UDP ソケットで MP3 ファイルをストリーミングしています。転送は高速ですが、数千回の操作の後で lwip_recvfrom がブロックされることがあります。タイムアウト状態が表示されません。私は何か間違ったことをしていると思います。

次の手順は次のとおりです。

int socket = lwip_socket(AF_INET, SOCK_DGRAM, 0);

if(lwip_setsockopt( socket,
                    SOL_SOCKET,
                    SO_RCVTIMEO,
                    (int)timeoutTimeInMiliSeconds,
                    sizeof(int)) == -1)
{
    return -1;
}
....
if(lwip_bind(protocolConfig.socket,
             (struct sockaddr *)&sLocalAddr,
             sizeof(sLocalAddr)) == -1)
{
    return -1;
}
bytesWritten = lwip_sendto( socket,
                            transmitBuffer,
                            transmitBufferIndex,
                            0,
                            (struct sockaddr *)&sDestAddr,
                            sizeof(sDestAddr));
.....
bytesReceived = lwip_recvfrom(  socket,
                                receptionBuffer,
                                receptionBufferSize,
                                0,
                                NULL,
                                NULL);

if(bytesReceived < 0)
{
   //Error stuff, this condition is never reached.
}

誰かがここで何が悪いのか知っていますか?

4

1 に答える 1

2

問題が解決しました。

lwip_setsockopt には次のプロトタイプがあります。

int lwip_setsockopt(int socket, int level, int option_name,const void *option_value, socklen_t option_len);

そして、option_value の値をコピーして送信していました。

タイムアウトは正常に機能しています。

于 2014-10-06T16:04:48.903 に答える