¿Qué tan grande debe ser mi búfer recv al llamar a recv en la biblioteca de sockets?

Tengo algunas preguntas sobre la biblioteca de sockets en C. Aquí hay un fragmento de código al que me referiré en mis preguntas.

char recv_buffer[3000];
recv(socket, recv_buffer, 3000, 0);
¿Cómo decido qué tan grande hacer recv_buffer? Estoy usando 3000, pero es arbitrario.Qué pasa sirecv() recibe un paquete más grande que mi búfer?¿Cómo puedo saber si he recibido el mensaje completo sin volver a llamar a recv y esperarlo para siempre cuando no hay nada que recibir?¿Hay alguna manera de hacer que un búfer no tenga una cantidad fija de espacio, de modo que pueda seguir agregándolo sin temor a quedarse sin espacio? tal vez usandostrcat para concatenar lo últimorecv() respuesta al búfer?

Sé que son muchas preguntas en una, pero agradecería mucho cualquier respuesta.

Respuestas a la pregunta(6)

Su respuesta a la pregunta