Open ning2510 opened 2 years ago
问题所在 这里减的是 m_iv[0].iov_len - bytes_have_send,应该是 m_write_idx - bytes_have_send,说一下原因:
m_iv[0].iov_len - bytes_have_send
m_write_idx - bytes_have_send
iovec
writev
m_iv[0].iov_len
m_iv[0].iov_len = m_iv[0].iov_len - 30 = 90 - 30 = 60
m_iv[0].iov_len = m_iv[0].iov_len - 60 = 60 - 60 = 0
m_write_idx 第一个 iovec 的头部信息数据长度,而且 m_write_idx 在循环发送的过程中是不会改变的,同时也应该改上面的 if 语句的 m_iv[0].iov_len 也改为 m_write_idx
m_write_idx
if
有道理
问题所在 这里减的是
m_iv[0].iov_len - bytes_have_send
,应该是m_write_idx - bytes_have_send
,说一下原因:iovec
的头部信息数据长度需要多次使用writev
才能发送完的话,那么m_iv[0].iov_len
就会重复减去相同的值iovec
的头部信息数据长度为 90,每次writev
发送的长度为 30。第一次调用writev
后m_iv[0].iov_len = m_iv[0].iov_len - 30 = 90 - 30 = 60
,第二次后m_iv[0].iov_len = m_iv[0].iov_len - 60 = 60 - 60 = 0
,实际还有 30 没有发送m_write_idx
第一个iovec
的头部信息数据长度,而且m_write_idx
在循环发送的过程中是不会改变的,同时也应该改上面的if
语句的m_iv[0].iov_len
也改为m_write_idx