Provided by: manpages-zh_1.5-1_all bug

NAME

       send, sendto, sendmsg - 從套接字發送消息

z
       #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);

yz
       Send,   sendto,    和    sendmsg    用於向另一荇M接字傳遞消息.     Send
       僅僅用於連接套接字,而 sendtosendmsg 可用於任何情況下.

       目標地址用   to   指定,   tolen   定義其長度.消息的長度用   len   指定.
       如果消息太長不能通過下層協議,函數將返回 EMSGSIZE 錯誤,消息也不會被送出.

       在數據傳送過程中所產生的錯誤不會返回給                            send.
       如果發生本地錯誤,則返回-1.

       當n發送的消息長度大於套接字當前可用緩沖區時,                       send
       將阻塞,除非在套接字上設置了非阻塞式輸入輸出模式.
       對於非阻塞模式,這種情況下將返回 EAGAIN 錯誤.   The  系統調用  select(2)
       可以用來檢測何時可以發送更多的數據.

       參數 flags 是一蚍郅x字,可以包含下列標誌:

       對於支持帶外數據的套接字,
              MSG_OOB    將送出   out-of-band   (帶外)數據(比如,   SOCK_STREAM
              類型的套接字); 下層協議也必須支持.  a~ 數據.

       MSG_DONTROUTE
              在送出分組時不使用網關.只有直接連接在網路上的主機
              才能接收到數據.這蚍郅x通常僅用於診斷和路由程式.
              可路由的協議族才能使用這蚍郅x;包套接字不可以.

       MSG_DONTWAIT
              使用非阻塞式操作;如果操作需n阻塞,將返回   EAGAIN   錯誤(也可以用
              F_SETFL fcntl(2) 設置 O_NONBLOCK 實現這茈\能.)

       MSG_NOSIGNAL
              當流式套接字的另一端中斷連接時不發送   SIGPIPE   信號,但仍然返回
              EPIPE 錯誤.

       MSG_CONFIRM (僅用於Linux 2.3以上版本)
              通知鏈路層發生了轉發過程:得到了另一端的成功應答.
              如果鏈路層沒有收到通知,它將按照常規探測網路上的相鄰
              主機(比如通過免費arp).    只能用於   SOCK_DGRAMSOCK_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_controlmsg_controllen        成-
       發送任何控制信息.核心所能處理的最大控制消息緩沖區長度由
       net.core.optmem_max sysctl對每荇M接字進行定;參見 socket(7).

^
       成功時返回發送的字符蚍,否則返回-1.

~NX
       其中一些是套接字層產生的標準錯誤.其他的是下層協議模塊產生的;參見
       各自的man手冊.

       EBADF  指定了非法描z符.

       ENOTSOCK
              參數 s 不是一荇M接字.

       EFAULT 參數指定的使用者地址空間非法.

       EMSGSIZE
              消息長度越界.

       EAGAIN或者EWOULDBLOCK
              套接字設置為非阻塞式,但所請求的操作需n阻塞.

       ENOBUFS
              網路接口輸出隊列已滿.這通常表明接口已停止發送,也有可能是
              暫時性的擁擠(這不會發生在linux下,當設備隊列溢出時數據報
              只是被簡單丟棄.

       EINTR  接收到信號.

       ENOMEM 沒有可用記憶體.

       EINVAL 傳遞的參數非法.

       EPIPE  連接套接字的本地端已關閉.這種情況下進程還會接收到        SIGPIPE
              信號,除非設置了 MSG_NOSIGNAL

e於
       4.4BSD,SVr4,POSIX1003.1g草案(這些系統調用漲艇X現於4.2BSD).  MSG_CONFIRM
       是Linux所做的擴展.

`N
       上接馴X的函數鴢玷穘`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

mlinuxan:
       http://cmpp.linuxforum.net