SEND 2
目录
- NAME send, sendto, sendmsg
- 概述
.B #include
.br .B #include .sp .BI - 描述 .BR Send , .BR sendto , 和 .B sendmsg 用于向另一个套接字传递消息. .B Send 仅仅用于连接套接字,而 .B sendto 和 .B sendmsg 可用于任何情况下. .PP 目标地址用 .I to 指定, .I tolen 定义其长度.消息的长度用 .IR len 指定. 如果消息太长不能通过下层协议,函数将返回 .B EMSGSIZE 错误,消息也不会被送出. .PP 在数据传送过程中所产生的错误不会返回给 .BR send. 如果发生本地错误,则返回
- 返回值 成功时返回发送的字符个数,否则返回-1. .SH 错误代码 其中一些是套接字层产生的标准错误.其他的是下层协议模块产生的;参见 各自的man手册. .TP .B EBADF 指定了非法描述符. .TP .B ENOTSOCK 参数 .I s 不是一个套接字. .TP .B EFAULT 参数指定的用户地址空间非法. .TP .B EMSGSIZE 消息长度越界. .TP .BR EAGAIN
- 兼容于 4.4BSD,SVr4,POSIX1003.1g草案(这些系统调用首次出现于4.2BSD). .B MSG_CONFIRM 是Linux所做的扩展. .SH 注意 上面给出的函数原型遵循Single Unix Specification, glibc2也是这么做的; .I flags 参数在BSD4.*中是`int',但在libc4和libc5中是`unsigned int'; 参数 .I len 在BSD4.*和libc4中是`int',但在libc5中是'size_t'; 参数 .I tolen 在BSD4.*,libc4和libc5中都是`int'. 参见 .BR accept (2). .SH
- [中文版维护人]
- [中文版最新更新]
- 《中国linux论坛man手册页翻译计划》:
- 跋
SEND
NAMEæ¦è¿°
æè¿°
è¿åå¼
é误代ç
å¼å®¹äº
注æ
SEE ALSO
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·
NAME
send, sendto, sendmsg - ä»å¥æ¥ååéæ¶æ¯
æ¦è¿°
#include
<sys/types.h>
#include <sys/socket.h>
int
send(int s, const void *msg,
size_t len, int flags);
int sendto(int s, const void
*msg, size_t len, int
flags, const struct sockaddr *to,
socklen_t tolen);
int sendmsg(int s, const struct msghdr
*msg, int flags);
æè¿°
Send, sendto, å sendmsg ç¨äºåå¦ä¸ä¸ªå¥æ¥åä¼ éæ¶æ¯. Send ä»ä»ç¨äºè¿æ¥å¥æ¥å,è sendto å sendmsg å¯ç¨äºä»»ä½æåµä¸.
ç®æ å°åç¨ to æå®, tolen å®ä¹å¶é¿åº¦.æ¶æ¯çé¿åº¦ç¨ len æå®. å¦ææ¶æ¯å¤ªé¿ä¸è½éè¿ä¸å±åè®®,彿°å°è¿å EMSGSIZE é误,æ¶æ¯ä¹ä¸ä¼è¢«éåº.
卿°æ®ä¼ éè¿ç¨ä¸æäº§ççé误ä¸ä¼è¿åç» send. 妿åçæ¬å°é误,åè¿å-1.
å½è¦åéçæ¶æ¯é¿åº¦å¤§äºå¥æ¥åå½åå¯ç¨ç¼å²åºæ¶, send å°é»å¡,é¤éå¨å¥æ¥å- ä¸è®¾ç½®äºéé»å¡å¼è¾å¥è¾åºæ¨¡å¼. 对äºéé»å¡æ¨¡å¼,è¿ç§æåµä¸å°è¿å EAGAIN é误. The ç³»ç»è°ç¨ select(2) å¯ä»¥ç¨æ¥æ£æµä½æ¶å¯ä»¥åéæ´å¤çæ°æ®.
åæ°
flags
æ¯ä¸ä¸ªæ å¿å,å¯ä»¥åå«ä¸åæ å¿:
å¯¹äºæ¯æå¸¦å¤æ°æ®ç奿¥å,
MSG_OOB å°éåº out-of-band (带å¤)æ°æ®(æ¯å¦, SOCK_STREAM ç±»åç奿¥å); ä¸å±åè®®ä¹å¿é¡»æ¯æ. å¸¦å¤ æ°æ®.
MSG_DONTROUTE
å¨éåºåç»æ¶ä¸ä½¿ç¨ç½å³.åªæç´æ¥è¿æ¥å¨ç½ç»ä¸çä¸»æº æè½æ¥æ¶å°æ°æ®.è¿ä¸ªæ å¿é常ä»ç¨äºè¯æåè·¯ç±ç¨åº. å¯è·¯ç±çåè®®ææè½ä½¿ç¨è¿ä¸ªæ å¿;å奿¥åä¸å¯ä»¥.
MSG_DONTWAIT
使ç¨éé»å¡å¼æä½;妿æä½éè¦é»å¡,å°è¿å EAGAIN é误(ä¹å¯ä»¥ç¨ F_SETFL fcntl(2) 设置 O_NONBLOCK å®ç°è¿ä¸ªåè½.)
MSG_NOSIGNAL
彿µå¼å¥æ¥åçå¦ä¸ç«¯ä¸æè¿æ¥æ¶ä¸åé SIGPIPE ä¿¡å·,ä½ä»ç¶è¿å EPIPE é误.
MSG_CONFIRM (ä»ç¨äºLinux 2.3以ä¸çæ¬)
éç¥é¾è·¯å±åçäºè½¬åè¿ç¨:å¾å°äºå¦ä¸ç«¯çæååºç. 妿é¾è·¯å±æ²¡ææ¶å°éç¥,å®å°æç§å¸¸è§æ¢æµç½ç»ä¸çç¸é» 主æº(æ¯å¦éè¿åè´¹arp). åªè½ç¨äº SOCK_DGRAM å SOCK_RAW ç±»åç奿¥å,ä¸ä»å¯¹IPv4åIPv6ææ.详æåè§ arp(7)
ç»æä½ msghdr çå®ä¹å¦ä¸.详æåè§ recv(2) å䏿.
struct msghdr {
|
void |
|||
|
* msg_name; |
/*å°åé项*/ | ||
|
socklen_t |
|||
|
msg_namelen; |
/*å°åé¿åº¦*/ | ||
|
struct iovec |
|||
|
* msg_iov; |
/*æ¶æ¯æ°ç»*/ | ||
|
size_t |
|||
|
msg_iovlen; |
/*msg_iovä¸çåç´ ä¸ªæ°*/ | ||
|
void |
|||
|
* msg_control; |
/*è¾å©ä¿¡æ¯,è§ä¸æ*/ | ||
|
socklen_t |
|||
|
msg_controllen; |
/*è¾å©æ°æ®ç¼å²åºé¿åº¦*/ | ||
|
int |
|||
|
msg_flags; |
/*æ¥æ¶æ¶æ¯æ å¿*/ |
};
å¯ä»¥ä½¿ç¨ msg_control å msg_controllen æååé任使§å¶ä¿¡æ¯.åæ ¸æè½å¤ççæå¤§æ§å¶æ¶æ¯ç¼å²åºé¿åº¦ç± net.core.optmem_max sysctl对æ¯ä¸ªå¥æ¥åè¿è¡éå®;åè§ socket(7).
è¿åå¼
æåæ¶è¿ååéçå符个æ°,å¦åè¿å-1.
é误代ç
å¶ä¸ä¸äºæ¯å¥æ¥åå±äº§ççæ åé误.å¶ä»çæ¯ä¸å±å议模å产çç;åè§ åèªçmanæå.
|
EBADF |
æå®äºéæ³æè¿°ç¬¦. |
ENOTSOCK
åæ° s 䏿¯ä¸ä¸ªå¥æ¥å.
|
EFAULT |
åæ°æå®çç¨æ·å°å空é´éæ³. |
EMSGSIZE
æ¶æ¯é¿åº¦è¶ç.
EAGAINæèEWOULDBLOCK
奿¥å设置为éé»å¡å¼,ä½æè¯·æ±çæä½éè¦é»å¡.
ENOBUFS
ç½ç»æ¥å£è¾åºéå已满.è¿éå¸¸è¡¨ææ¥å£å·²åæ¢åé,乿å¯è½æ¯ ææ¶æ§çæ¥æ¤(è¿ä¸ä¼åçå¨linuxä¸,å½è®¾å¤éåæº¢åºæ¶æ°æ®æ¥ åªæ¯è¢«ç®å丢å¼.
|
EINTR |
æ¥æ¶å°ä¿¡å·. | ||
|
ENOMEM |
没æå¯ç¨åå. | ||
|
EINVAL |
ä¼ éçåæ°éæ³. | ||
|
EPIPE |
è¿æ¥å¥æ¥åçæ¬å°ç«¯å·²å³é.è¿ç§æåµä¸è¿ç¨è¿ä¼æ¥æ¶å° SIGPIPE ä¿¡å·,é¤éè®¾ç½®äº MSG_NOSIGNAL |
å¼å®¹äº
4.4BSD,SVr4,POSIX1003.1gèæ¡(è¿äºç³»ç»è°ç¨é¦æ¬¡åºç°äº4.2BSD). MSG_CONFIRM æ¯Linuxæåçæ©å±.
注æ
ä¸é¢ç»åºç彿°ååéµå¾ªSingle Unix Specification, glibc2乿¯è¿ä¹åç; flags åæ°å¨BSD4.*䏿¯‘int’,ä½å¨libc4ålibc5䏿¯‘unsigned int’; åæ° len å¨BSD4.*ålibc4䏿¯‘int’,ä½å¨libc5䏿¯’size_t’; åæ° tolen å¨BSD4.*,libc4ålibc5ä¸é½æ¯‘int’. åè§ accept(2).
SEE ALSO
fcntl(2), recv(2), select(2), getsockopt(2), sendfile(2), socket(2), write(2), socket(7), ip(7), tcp(7), udp(7)
[䏿çç»´æ¤äºº]
byeyear <love_my_love@263.net >
[ä¸æçææ°æ´æ°]
2002.02.27
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
http://cmpp.linuxforum.net
è·
æ¬é¡µé¢ä¸æçç±ä¸æ
man
æå页计åæä¾ã
䏿 man
æå页计åï¼https://github.com/man-pages-zh/manpages-zh