Imported upstream version 1.5
[manpages-zh.git] / src / man2 / send.2
blob8eaf86976ea1e8ffede8d2cf6e939c70845fafce
1 .\" Copyright (c) 1983, 1991 The Regents of the University of California.
2 .\" All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. All advertising materials mentioning features or use of this software
13 .\"    must display the following acknowledgement:
14 .\"     This product includes software developed by the University of
15 .\"     California, Berkeley and its contributors.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\" Modified Sat Jul 24 01:15:33 1993 by Rik Faith <faith@cs.unc.edu>
33 .\" Modified Tue Oct 22 17:55:49 1996 by Eric S. Raymond <esr@thyrsus.com>
34 .\" Modified Oct 1998 by Andi Kleen
35 .\" 中文版 Copyright (c) 2002 byeyear 和 www.linuxforum.net
36 .\"
37 .TH SEND 2 "July 1999" "Linux Man Page" "Linux Programmer's Manual"
38 .SH NAME
39 send, sendto, sendmsg \- 从套接字发送消息
40 .SH 概述
41 .B #include <sys/types.h>
42 .br
43 .B #include <sys/socket.h>
44 .sp
45 .BI "int send(int " s ", const void *" msg ", size_t " len ","
46 .BI "int " flags );
47 .br
48 .BI "int sendto(int " s ", const void *" msg ", size_t " len ","
49 .BI "int " flags ", const struct sockaddr *" to ", socklen_t " tolen );
50 .br
51 .BI "int sendmsg(int " s ", const struct msghdr *" msg ","
52 .BI "int " flags );
53 .SH 描述
54 .BR Send ,
55 .BR sendto ,
56
57 .B sendmsg
58 用于向另一个套接字传递消息.
59 .B Send
60 仅仅用于连接套接字,而 
61 .B sendto
62
63 .B sendmsg
64 可用于任何情况下.
65 .PP
66 目标地址用
67 .I to
68 指定,
69 .I tolen
70 定义其长度.消息的长度用
71 .IR len
72 指定.
73 如果消息太长不能通过下层协议,函数将返回
74 .B EMSGSIZE
75 错误,消息也不会被送出.
76 .PP
77 在数据传送过程中所产生的错误不会返回给
78 .BR send.
79 如果发生本地错误,则返回\-1.
80 .PP
81 当要发送的消息长度大于套接字当前可用缓冲区时,
82 .B send
83 将阻塞,除非在套接字上设置了非阻塞式输入输出模式.
84 对于非阻塞模式,这种情况下将返回
85 .B EAGAIN
86 错误.
87 The
88 系统调用
89 .BR select (2)
90 可以用来检测何时可以发送更多的数据.
91 .PP
92 参数
93 .I flags
94 是一个标志字,可以包含下列标志:
95 .\" XXX document MSG_PROXY
96 .TP
97 对于支持带外数据的套接字,
98 .B MSG_OOB
99 将送出
100 .I out-of-band
101 (带外)数据(比如,
102 .BR SOCK_STREAM
103 类型的套接字);
104 下层协议也必须支持.
105 .I 带外
106 数据.
108 .B MSG_DONTROUTE
109 在送出分组时不使用网关.只有直接连接在网络上的主机
110 才能接收到数据.这个标志通常仅用于诊断和路由程序.
111 可路由的协议族才能使用这个标志;包套接字不可以.
113 .B MSG_DONTWAIT
114 使用非阻塞式操作;如果操作需要阻塞,将返回
115 .B EAGAIN 
116 错误(也可以用
117 .B F_SETFL
118 .BR fcntl(2)
119 设置
120 .B O_NONBLOCK
121 实现这个功能.)
123 .B MSG_NOSIGNAL
124 当流式套接字的另一端中断连接时不发送 
125 .B SIGPIPE 
126 信号,但仍然返回 
127 .B EPIPE
128 错误.
130 .BR MSG_CONFIRM " (仅用于Linux 2.3以上版本)"
131 通知链路层发生了转发过程:得到了另一端的成功应答.
132 如果链路层没有收到通知,它将按照常规探测网络上的相邻
133 主机(比如通过免费arp). 
134 只能用于 
135 .B SOCK_DGRAM
137 .B SOCK_RAW
138 类型的套接字,且仅对IPv4和IPv6有效.详情参见
139 .BR arp (7)
141 结构体
142 .I msghdr
143 的定义如下.详情参见 
144 .BR recv (2)
145 和下文.
149 .ta 4n 17n 33n
150 struct msghdr {
151         void    * msg_name;     /*地址选项*/
152         socklen_t       msg_namelen;    /*地址长度*/
153         struct iovec    * msg_iov;      /*消息数组*/
154         size_t  msg_iovlen;     /*msg_iov中的元素个数*/
155         void    * msg_control;  /*辅助信息,见下文*/
156         socklen_t       msg_controllen; /*辅助数据缓冲区长度*/
157         int     msg_flags;      /*接收消息标志*/
163 可以使用 
164 .I msg_control 
166 .I msg_controllen 
167 成员发送任何控制信息.内核所能处理的最大控制消息缓冲区长度由
168 .B net.core.optmem_max 
169 sysctl对每个套接字进行限定;参见
170 .BR socket (7).
171 .SH 返回值
172 成功时返回发送的字符个数,否则返回-1.
173 .SH 错误代码
174 其中一些是套接字层产生的标准错误.其他的是下层协议模块产生的;参见
175 各自的man手册.
177 .B EBADF
178 指定了非法描述符.
180 .B ENOTSOCK
181 参数
182 .I s
183 不是一个套接字.
185 .B EFAULT
186 参数指定的用户地址空间非法.
188 .B EMSGSIZE
189 消息长度越界.
191 .BR EAGAIN "或者" EWOULDBLOCK
192 套接字设置为非阻塞式,但所请求的操作需要阻塞.
194 .B ENOBUFS
195 网络接口输出队列已满.这通常表明接口已停止发送,也有可能是
196 暂时性的拥挤(这不会发生在linux下,当设备队列溢出时数据报
197 只是被简单丢弃.
199 .B EINTR
200 接收到信号.
202 .B ENOMEM
203 没有可用内存.
205 .B EINVAL
206 传递的参数非法. 
208 .B EPIPE
209 连接套接字的本地端已关闭.这种情况下进程还会接收到
210 .B SIGPIPE
211 信号,除非设置了
212 .B MSG_NOSIGNAL 
213 .SH 兼容于
214 4.4BSD,SVr4,POSIX1003.1g草案(这些系统调用首次出现于4.2BSD).
215 .B MSG_CONFIRM 
216 是Linux所做的扩展.
217 .SH 注意
218 上面给出的函数原型遵循Single Unix Specification,
219 glibc2也是这么做的;
220 .I flags
221 参数在BSD4.*中是`int',但在libc4和libc5中是`unsigned int';
222 参数
223 .I len
224 在BSD4.*和libc4中是`int',但在libc5中是'size_t';
225 参数
226 .I tolen
227 在BSD4.*,libc4和libc5中都是`int'.
228 参见
229 .BR accept (2).
230 .SH "SEE ALSO"
231 .BR fcntl (2),
232 .BR recv (2),
233 .BR select (2),
234 .BR getsockopt (2),
235 .BR sendfile (2),
236 .BR socket (2),
237 .BR write (2),
238 .BR socket (7),
239 .BR ip (7),
240 .BR tcp (7),
241 .BR udp (7)
243 .SH "[中文版维护人]"
244 .B byeyear <love_my_love@263.net >
245 .SH "[中文版最新更新]"
246 .B 2002.02.27
247 .SH "《中国linux论坛man手册页翻译计划》:"
248 .BI http://cmpp.linuxforum.net