Devo usar descritores de arquivos ou fluxos para leitura / gravação em soquetes

Depois que um soquete foi configurado, é melhor praticar usar as chamadas read (2) e write (2) no descritor de soquete ou associar um fluxo ao descritor de soquete usando fdopen (3) e, em seguida, usar as funções stdio (3) ?

int sfd = socket(PF_INET, SOCK_STREAM, 0);
// setup the socket using sfd
FILE * stream = fdopen(sfd, "r+");
// use fprintf, fscanf, etc

EDIT: eu também unbuffer o fluxo

setbuf(stream, NULL)

Para evitar ter que limpá-lo como mencionado nos comentários.

Eu tenho usado essa abordagem porque ela me permite reutilizar código escrito para fluxos FILE * e tenho a vantagem de poder usar strings de formato (estou trabalhando com texto legível por humanos). O GNU parece sugerir que esta é uma boa ideia.

http://www.gnu.org/software/libc/manual/html_node/Streams-and-File-Descriptors.html

No entanto, geralmente quando vejo código usando sockets, o descritor de soquete é usado em vez de um fluxo para todas as operações. Existe uma vantagem em usar as funções de nível inferior?

questionAnswers(1)

yourAnswerToTheQuestion