2013-07-17 7 views
5

Su Linux, a meno che non mi sbagli, un'applicazione può utilizzare la famiglia di chiamate socket per inviare o ricevere un pacchetto alla volta sui trasporti di datagrammi.Ricezione di più datagrammi in una singola chiamata di sistema

Vorrei sapere se Linux fornisce un mezzo per l'applicazione per inviare e ricevere più pacchetti in una singola chiamata sui trasporti di datagrammi.

+1

Non è previsto dall'API BSD (questo è quello che stai facendo lled la "famiglia chiamata socket"). – nouney

+2

Su Linux si potrebbe dare un'occhiata al syscall sendmmsg – PlasmaHH

risposta

7

Usa recvmmsg per ricevere più pacchetti datagram (ad esempio UDP)

int recvmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen, 
        unsigned int flags, struct timespec *timeout); 
DESCRIPTION   
    The recvmmsg() system call is an extension of recvmsg(2) that allows 
    the caller to receive multiple messages from a socket using a single 
    system call. ... 

http://man7.org/linux/man-pages/man2/recvmmsg.2.html

Usa sendmmsg per inviare ...

int sendmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen, 
        unsigned int flags); 
DESCRIPTION   
    The sendmmsg() system call is an extension of sendmsg(2) that allows 
    the caller to transmit multiple messages on a socket using a single 
    system call. 

http://man7.org/linux/man-pages/man2/sendmmsg.2.html

0

Non esiste questa chiamata su Linux. Tuttavia, a seconda che cosa avete bisogno, ci sono alternative:

+0

Per ora, sto usando la famiglia io _ *() di chiamate IO asincrone per risolvere il mio scopo. L'IO asincrono è un po 'un trucco, ma facilita l'invio/ricezione di più pacchetti alla volta. – Maddy