我的数据自然是分段的,并且来自不同的来源,因此我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);
Run Code Online (Sandbox Code Playgroud)
我想发送我的所有数据。如果 writev 一次只写入部分数据怎么办,例如:
bytes_written = 1;
Run Code Online (Sandbox Code Playgroud)
如何继续发送剩余数据?在write函数中,我们可以使用这个方法,那么writev呢?
iov[0].iov_basebytes_writteniov[0].iov_lenbytes_writteniov[0].iov_len将差值传播到其中,依此类推,直到关闭。iov[1]但是,如果您处于阻塞模式,这不是问题,因为永远不会出现短写入的情况。