2013-07-17 39 views
5

Trên Linux, trừ khi tôi nhầm, một ứng dụng có thể sử dụng họ gọi ổ cắm để gửi hoặc nhận một gói dữ liệu tại một thời điểm trên truyền dữ liệu.Nhận nhiều gói dữ liệu trong một hệ thống gọi

Muốn biết Linux có cung cấp phương tiện cho ứng dụng để gửi và nhận nhiều gói trong một cuộc gọi duy nhất trên truyền dữ liệu hay không.

+1

Nó không được cung cấp bởi BSD API (đó là những gì bạn ca lled "gia đình cuộc gọi socket"). – nouney

+2

Trên linux, bạn có thể muốn xem smmall sendmmsg – PlasmaHH

Trả lời

7

Sử dụng recvmmsg để nhận được nhiều gói datagram (ví dụ 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

Sử dụng sendmmsg để gửi ...

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

Không có cuộc gọi nào trên Linux. Tuy nhiên, tùy thuộc vào những gì bạn cần, có các lựa chọn thay thế:

+0

Bây giờ, tôi đang sử dụng gia đình io _ *() của các cuộc gọi async IO để giải quyết mục đích của tôi. IO không đồng bộ là một chút gian lận, nhưng nó tạo điều kiện cho việc gửi/nhận nhiều gói dữ liệu cùng một lúc. – Maddy

Các vấn đề liên quan