ENET(七)——enet_socket_send()函数

接enet(四):

该函数是用于发送的socket函数,是真正的发送动作,代码中可看到是UDP网络发送,发送函数用的是sendmsg()

发送函数有三个,send/sendto/sendmsg,这里用最后一个,是因为:sendmsg可以发送一些控制信息,直接用sendmsg相比send效率应该也高一些,毕竟后者实际也是调用前者。比如说, 当你要传输的数据位于两个buffer之中,你用send,必须先把两个buffer连接成一个buffer再调用send,但是sendmsg可以直接调用


int
enet_socket_send (ENetSocket socket,
                  const ENetAddress * address,
                  const ENetBuffer * buffers,                                                                                                                                                
                  size_t bufferCount)
{
    struct msghdr msgHdr;
    struct sockaddr_in sin;
    int sentLength;
 
    memset (& msgHdr, 0, sizeof (struct msghdr));
 
    if (address != NULL)
    {   
        memset (& sin, 0, sizeof (struct sockaddr_in));
 
        sin.sin_family = AF_INET;
        sin.sin_port = ENET_HOST_TO_NET_16 (address -> port);
        sin.sin_addr.s_addr = address -> host;
 
        msgHdr.msg_name = & sin;
        msgHdr.msg_namelen = sizeof (struct sockaddr_in);
    }   
 
    msgHdr.msg_iov = (struct iovec *) buffers;
    msgHdr.msg_iovlen = bufferCount;
 
    sentLength = sendmsg (socket, & msgHdr, MSG_NOSIGNAL);
    
    if (sentLength == -1) 
    {   
       if (errno == EWOULDBLOCK)
         return 0;
 
       return -1; 
    }   
 
    return sentLength;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值