Qual deve ser o tamanho do meu buffer de recv ao chamar recv na biblioteca de soquetes

Eu tenho algumas perguntas sobre a biblioteca de soquetes no C. Aqui está um trecho de código ao qual me referirei nas minhas perguntas.

char recv_buffer[3000];
recv(socket, recv_buffer, 3000, 0);
Como decido qual o tamanho do recv_buffer? Estou usando 3000, mas é arbitrário.o que acontece serecv() recebe um pacote maior que meu buffer?como posso saber se recebi a mensagem inteira sem chamar recv novamente e aguardar para sempre quando não houver nada a ser recebido?existe uma maneira de fazer com que um buffer não tenha uma quantidade fixa de espaço, para que eu possa continuar adicionando a ele sem medo de ficar sem espaço? talvez usandostrcat concatenar as últimasrecv() resposta ao buffer?

Eu sei que há muitas perguntas em uma, mas eu aprecio muito as respostas.

questionAnswers(6)

yourAnswerToTheQuestion