如果writev只写入部分数据怎么处理?

时间:2017-07-21 01:55:04

标签: linux sockets

我的数据自然是分段的,来自不同的来源所以我使用writev函数如下。

char *buf0 = "short string\n";
struct bar *my_bar;
my_baz = get_my_baz();
iov[0].iov_base = buf0;
iov[0].iov_len = strlen(buf0);
iov[1].iov_base = my_bar;
iov[1].iov_len = sizeof (struct bar);
bytes_written = writev (sockfd, iov, 3);

我想发送所有数据。如果writev只在一次写入部分数据,例如:

,该怎么办?
bytes_written = 1;

如何继续发送剩余数据? 在写函数中,我们可以执行如下enter link description here,writev怎么样?

1 个答案:

答案 0 :(得分:0)

  1. iov[0].iov_base增加bytes_written
  2. iov[0].iov_len递减bytes_written
  3. 处理下溢,即如果iov[0].iov_len变为负数,请记住它,将其设置为零,然后以与(1)和(2)相同的方式将差异传播到iov[1],并且等等,直到关闭。
  4. 但是,如果你处于阻止模式,这是一个非问题,因为短写不会出现。