zoukankan      html  css  js  c++  java
  • 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:本地连接已关闭

  • 相关阅读:
    如何根据w3wp.exe的进程pid查看是哪个应用程序池
    Wpf从资源中重用UI元素
    Project not selected to build for this solution configuration.
    wpf 只在window是ShowDialog打开时才设置DialogResult
    Stop a hung service 关闭一个无响应的windows 服务
    调用windows api 获取系统分辨率
    PHP7中session_start 使用注意事项,会导致浏览器刷时页面数据不更新
    form表单清空、重置
    php用户注册常用检测、写入
    搜索条件两个时间,通过php数组排序,保证select语句between时间 前小后大
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2141483.html
Copyright © 2011-2022 走看看