我的数据是自然分割的,并且来自不同的来源,因此我按如下方式使用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;

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

最佳答案

  • iov[0].iov_base增加bytes_written
  • iov[0].iov_len减少bytes_written
  • 处理下溢,即,如果iov[0].iov_len变为负数,请记住它,将其设置为零,然后以与(1)和(2)相同的方式将差异传播到iov[1]中,依此类推直至关闭。

  • 但是,如果您处于阻塞模式,这将是不成问题的,因为永远不会出现短写的情况。

    10-05 22:57