释放char [],用作基于UDP的数据传输的缓冲区到多个客户端

时间:2016-02-05 12:37:25

标签: c udp

我正在开发一个基于UDP的客户端 - 服务器应用程序,该应用程序必须拥有此服务器和2个客户端。 2个客户端将数据发送到服务器并从中接收数据。现在我正在使用以下

static char Buffer_In[256];
static char Buffer_Out[256];

我将要传输的数据填入:

memcpy( Buffer_Out, 
        (char*)&Foo_Data, 
        sizeof(Foo_Data) );

并发送:

Ret_Value = sendto( Socket, 
                    Buffer_Out, 
                    sizeof(Buffer_Out), 
                    0, 
                    (SOCKADDR*)&Remote_Addresse, 
                    Remote_Addr_Len );

Foo_Data是一个具有多个entrys的结构。我有第二个结构Baa_Data,它小于Foo_Data,但我使用相同的Buffer_Out。如果在将新数据写入之前我没有先释放Buffer_Out会有问题吗?如果是,那么什么问题以及如何防止它们呢?

2 个答案:

答案 0 :(得分:1)

sendto()返回时,缓冲区保存的数据已被复制。所以代码可以自由地重用缓冲区。

答案 1 :(得分:1)

不,这不会是一个问题。首先,静态变量使用的内存不能被释放" - 它在程序启动时分配,只有在程序启动时才会被释放。

您发布的代码部分看起来很安全(假设您不使用多个线程)。缓冲区buffer_out可以在sendto返回后立即重用;在内部,此函数在返回之前将缓冲区的内容复制到其他内存位置。