2

我将 LwIP 与 FreeRTOS 一起使用。我的项目基于此 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 回答