writev出现send errors: Bad address错误

学后端理论看完实操,小图片没问题,但是大文件传输第一次writev没有问题,第二次就会send errors: Bad address
    //映射到内存
    int fd = open(m_real_file,O_RDONLY);
    printf("file fd is %d\n", fd);
    m_file_address = (char *)mmap(0, m_file_stat.st_mode, PROT_READ, MAP_PRIVATE, fd, 0);
    printf("the first m_file_address is %d, and m_file_stat.st_mode is %d\n", m_file_address, m_file_stat.st_mode);
    close(fd);
//循环传输
  while(true){
        printf("now bytes_to_send is %d, bytes_have_send is %d, m_iv[1].iov_len is %d \n", bytes_to_send, bytes_have_send, m_iv[1].iov_len);
        printf("now m_file_address is %d, m_iv[1].iov_base is %d \n", m_file_address, m_iv[1].iov_base);
        bytes_write = writev(socketfd, m_iv, m_iv_count);
        if(bytes_write < 0){
            if(errno == EAGAIN){
                modfd(epollfd, socketfd, EPOLLOUT, m_TRIGMode);
                return true;
            }
            else {
                perror("send errors");
            }

            unmap();
            return false;
        }
        bytes_have_send += bytes_write;
        bytes_to_send -= bytes_write;

        if(bytes_have_send >= m_iv[0].iov_len){
            m_iv[0].iov_len = 0;
            m_iv[1].iov_base = m_file_address + (bytes_have_send - m_write_idx);
            m_iv[1].iov_len = bytes_to_send;
        }
        else{
            m_iv[0].iov_base = m_write_buf + bytes_have_send;
            m_iv[0].iov_len = m_iv[0].iov_len - bytes_have_send;
        }
}

img

结果能传出去半张图,然后回调函数给清了。在网页上就是闪一下就没了,变成失败的那种。能救一下吗?

接收端read的速度太慢