send sendto sendmsg函式解析

2021-09-07 21:15:14 字數 1488 閱讀 1663

功能描述:

傳送訊息。send只可用於基於連線的套接字,send 和 write唯一的不同點是標誌的存在,當標誌為0時,send等同於write。sendto 和 sendmsg既可用於無連線的套接字,也可用於基於連線的套接字。除了套接字設定為非阻塞模式,呼叫將會阻塞直到資料被傳送完。

用法:

#include

#include

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 ;

可能用到的資料結構有

struct cmsghdr ;

返回說明:

成功執行時,返回已傳送的位元組數。失敗返回-1,errno被設為以下的某個值

eacces:對於unix域套接字,不允許對目標套接字檔案進行寫,或者路徑前驅的乙個目錄節點不可搜尋

eagain,ewouldblock: 套接字已標記為非阻塞,而傳送操作被阻塞

ebadf:sock不是有效的描述詞

econnreset:連線被使用者重置

edestaddrreq:套接字不處於連線模式,沒有指定對端位址

efault:記憶體空間訪問出錯

eintr:操作被訊號中斷

einval:引數無效

eisconn:基於連線的套接字已被連線上,同時指定接收物件

emsgsize:訊息太大

enomem:記憶體不足

enotconn:套接字尚未連線,目標沒有給出

enotsock:sock索引的不是套接字

epipe:本地連線已關閉

wglUseFontBitmaps函式解釋

函式原型 bool winapi wglusefontbitmaps hdc hdc,dword first,dword count,dword listbase 可以使用wglusefontbitmaps函式來批量的產生顯示字元用的顯示列表。函式有四個引數 第乙個引數是hdc,學過windows ...

RPAD函式略解

在寫本篇部落格之前,有一點小東西要寫在前面,漢字佔多少個位元組得看你用的是什麼編碼集,如果是gbk和gb2312的話,確實是兩個位元組,在windows平台上會是你預期的兩個位元組。但是在linux平台使用的是utf8字符集,那麼就不一定了,不過,我現在做plsql等東西一般是在win平台上做的,l...

Sql Server函式全解《二》數學函式

原文 sql server函式全解 二 數學函式 eg select abs 2 abs 3.3 abs 33 pi eg select rand rand rand 可以看到,不帶引數的rand 每次產生的隨即數值是不同的。eg select rand 10 rand 10 rand 11 可以看...