//映射到内存
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;
}
}
接收端read的速度太慢