Sto lavorando alla scrittura di un'applicazione di rete in C++ sulla piattaforma Linux utilizzando l'API tipica dei socket e sto osservando 2 modi alternativi di scrittura un array di byte in un flusso TCP: chiamando write() o chiamando send(). So che, poiché questo è Linux, l'handle del socket è semplicemente un descrittore di file, e quindi è valido per eseguire chiamate read() e write() sul socket, tuttavia l'API socket fornisce anche send() e recv () funzioni per eseguire le stesse attività.Impatto delle prestazioni dell'uso di write() invece di send() durante la scrittura su un socket
Mi chiedo quindi se esista una ragione particolare per scegliere una classe di funzioni rispetto all'altra: le funzioni di invio/ricezione ottimizzate per la scrittura/lettura di rete, hanno prestazioni migliori, ecc.? O è davvero arbitrario quali funzioni uso? Read() e write() si comportano correttamente in tutti i casi?
Grazie per eventuali approfondimenti!
È vero anche per FreeBSD o altre piattaforme? - quella linea non appare nella mia manpage send (2). –
@GoodPerson Si applica a tutte le piattaforme. Se così non fosse, 'inetd' e simili non funzionerebbero. ('inetd' dups il tuo socket nello stdin e stdout del processo daemon, e il tuo processo può interagire direttamente con stdin e stdout nel modo normale, senza alcuna consapevolezza che siano socket. Naturalmente, puoi anche fare il socket con loro. –