How to solve: sending UDP packet using Sendto() got “message too long”

后端 未结 3 622
执笔经年
执笔经年 2021-01-13 08:30

I want to use the sendto() API to send video and audio data through UDP packet. The sending buffer size I got using getsockopt() is 114688, however, sendto() returned -1 wh

3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-13 09:02

    Why not just call sendto several times, with an offset into the buffer?

    int sendto_bigbuffer(int sock, const void *buffer, const size_t buflen, int flags,
                         const struct sockaddr *dest_addr, socklen_t addrlen)
    {
        size_t sendlen = MIN(buflen, 1024);
        size_t remlen  = buflen;
        const void *curpos = buffer;
    
        while (remlen > 0)
        {
            ssize_t len = sendto(sock, curpos, sendlen, flags, dest_addr, addrlen);
            if (len == -1)
                return -1;
    
            curpos += len;
            remlen -= len;
            sendlen = MIN(remlen, 1024);
        }
    
        return buflen;
    }
    

    Something like the above function will send the buffer 1024 bytes at a time.

提交回复
热议问题