2013-07-17 53 views
5

在Linux上,除非我弄錯了,否則應用程序可以使用套接字調用系列在數據報傳輸中一次發送或接收一個數據包。在單個系統調用中接收多個數據報

想知道Linux是否爲應用程序在數據報傳輸的單個調用中發送和接收多個數據包提供了一種方法。

+1

它沒有提供由BSD API(這就是你可以填充「套接字調用族」)。 – nouney

+2

在linux上,你可能想看一下sendmmsg syscall – PlasmaHH

回答

7

使用的recvmmsg接收多個數據包的數據包(例如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

使用sendmmsg發送...

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

Linux上沒有這樣的調用。但是,根據您的需要,還有其他選擇:

+0

現在,我使用io _ *()系列的異步IO調用來解決我的目的。異步IO有點欺騙,但它有助於一次發送/接收多個數據包。 – Maddy

相關問題