send/sendto/sendmsg

來源:互聯網
上載者:User

【send/sendto/sendmsg系統調用】
   
功能描述:
發送訊息。send只可用於基於串連的通訊端,send 和 write唯一的不同點是標誌的存在,當標誌為0時,send等同於write。sendto 和 sendmsg既可用於不需連線的通訊端,也可用於基於串連的通訊端。除了通訊端設定為非阻塞模式,調用將會阻塞直到資料被發送完。
用法:
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sock, const void *buf, size_t len, int flags);
ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
ssize_t sendmsg(int sock, const struct msghdr *msg, int flags);

參數:
sock:索引將要從其發送資料的通訊端。
buf:指向將要發送資料的緩衝區。
len:以上緩衝區的長度。
flags:是以下零個或者多個標誌的組合體,可通過or操作連在一起

MSG_DONTROUTE:不要使用網關來發送封包,只發送到直接連網的主機。這個標誌主要用於診斷或者路由程式。
MSG_DONTWAIT:操作不會被阻塞。
MSG_EOR:終止一個記錄。
MSG_MORE:調用者有更多的資料需要發送。
MSG_NOSIGNAL:當另一端終止串連時,請求在基於流的錯誤通訊端上不要發送SIGPIPE訊號。
MSG_OOB:發送out-of-band資料(需要優先處理的資料),同時現行協議必須支援此種操作。

to:指向存放接收端地址的地區,可以為NULL。
tolen:以上記憶體區的長度,可以為0。
msg:指向存放發送訊息頭的記憶體緩衝,結構形態如下

struct msghdr {
    void         *msg_name;     
    socklen_t     msg_namelen;  
    struct iovec *msg_iov;      
    size_t        msg_iovlen;   
    void         *msg_control;  
    socklen_t     msg_controllen;
    int           msg_flags;    
};

可能用到的資料結構有

struct cmsghdr {
    socklen_t cmsg_len;   
    int       cmsg_level;
    int       cmsg_type;  
  
};

返回說明:
成功執行時,返回已發送的位元組數。失敗返回-1,errno被設為以下的某個值
EACCES:對於Unix域通訊端,不允許對目標通訊端檔案進行寫,或者路徑前驅的一個目錄節點不可搜尋
EAGAIN,EWOULDBLOCK: 通訊端已標記為非阻塞,而發送操作被阻塞
EBADF:sock不是有效描述詞
ECONNRESET:串連被使用者重設
EDESTADDRREQ:通訊端不處於串連模式,沒有指定對端地址
EFAULT:記憶體空間訪問出錯
EINTR:操作被訊號中斷
EINVAL:參數無效
EISCONN:基於串連的通訊端已被串連上,同時指定接收對象
EMSGSIZE:訊息太大
ENOMEM:記憶體不足
ENOTCONN:通訊端尚未串連,目標沒有給出
ENOTSOCK:sock索引的不是通訊端
EPIPE:本地串連已關閉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.