在Linux上,除非我弄錯了,否則應用程序可以使用套接字調用系列在數據報傳輸中一次發送或接收一個數據包。在單個系統調用中接收多個數據報
想知道Linux是否爲應用程序在數據報傳輸的單個調用中發送和接收多個數據包提供了一種方法。
在Linux上,除非我弄錯了,否則應用程序可以使用套接字調用系列在數據報傳輸中一次發送或接收一個數據包。在單個系統調用中接收多個數據報
想知道Linux是否爲應用程序在數據報傳輸的單個調用中發送和接收多個數據包提供了一種方法。
使用的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.
Linux上沒有這樣的調用。但是,根據您的需要,還有其他選擇:
現在,我使用io _ *()系列的異步IO調用來解決我的目的。異步IO有點欺騙,但它有助於一次發送/接收多個數據包。 – Maddy
它沒有提供由BSD API(這就是你可以填充「套接字調用族」)。 – nouney
在linux上,你可能想看一下sendmmsg syscall – PlasmaHH