No, non esiste tale garanzia, anche con prese locali. Se si desidera un meccanismo IPC che garantisca la consegna in ordine, è possibile utilizzare le pipe full duplex con popen()
. Ciò apre una pipe al processo figlio che può leggere o scrivere arbitrariamente. Garantirà la consegna in ordine e può essere utilizzato con I/O sincrono o asincrono (select()
o poll()
), a seconda di come si desidera creare l'applicazione.
Su unix ci sono altre opzioni come socket di dominio unix o code di messaggi System V (alcune delle quali potrebbero essere più veloci) ma leggere/scrivere da una pipe è semplice e funziona. Come bonus è facile testare il processo del server perché è solo la lettura e la scrittura da Stdio.
Su Windows è possibile esaminare Named Pipes, che funzionano in modo un po 'diverso dal loro omonimo unix, ma sono utilizzati proprio per questo tipo di comunicazione tra processi.
Non c'è controllo di flusso. Il superamento di una quota del buffer del kernel non è improbabile. Utilizzare invece pipe con nome. –
Su UNIX, i socket di datagrammi del dominio UNIX locale ('socket (AF_UNIX, SOCK_DGRAM, 0)') sono garantiti come affidabili, con la stessa identica API di UDP. Purtroppo, Windows non ha socket di dominio UNIX; se ti adatti all'utilizzo dell'API Win32 invece di Winsock, puoi usare 'CreateNamedPipe' ecc. – ephemient