2013-07-17 12 views
5

W systemie Linux, o ile się nie mylę, aplikacja może używać rodziny połączeń z gniazdami do wysyłania lub odbierania po kolei jednego pakietu na transportach datagramowych.Odbieranie wielu datagramów w jednym wywołaniu systemowym

Chcesz wiedzieć, czy Linux zapewnia aplikacjom możliwość wysyłania i odbierania wielu pakietów w jednym wywołaniu na transporcie datagramów.

+1

To nie jest warunkiem przez API BSD (to jest to, co ty "rodzina połączeń z gniazdem"). – nouney

+2

Na Linuksie możesz chcieć rzucić okiem na syscall sendmmsg – PlasmaHH

Odpowiedz

7

Zastosowanie recvmmsg aby otrzymać wiele pakietów datagramowych (przykład 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

Zastosowanie sendmmsg wysłać ...

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

Nie ma takiego połączenia w systemie Linux. Jednak w zależności od tego, co trzeba, istnieją alternatywy:

+0

Na razie używam rodziny asynchronicznych wywołań IO io *, aby rozwiązać mój cel. Asynchroniczne IO jest trochę oszustwem, ale ułatwia wysyłanie/odbieranie wielu pakietów jednocześnie. – Maddy

Powiązane problemy