2

我在 C 中定义了以下结构,我想使用 Berkeley 套接字通过Linux 中客户端和服务器之间的TCP 连接发送它:

struct Argument{
int pid;
int length;
chat op;
char *data;
};

由于我有“char *data”,它是一个指针,可用于在本地发送机器中分配可变大小的数据,我必须在两次不同的时间将此结构发送到接收方。第一次,我只发送固定变量,即前三个变量。然后在接收时,我分配一个长度大小的缓冲区来第二次接收数据部分。

所以我的问题是无论如何只能将此结构发送到另一侧,数据字段大小可变,而不是我在做什么的两倍?

if (write(peer_fd, (struct Argument*) arg, sizeof (struct Argument)) < 0)
{
    close(peer_fd);
    return -1;
}

非常感谢。

4

1 回答 1

1

考虑使用分散-聚集读写技术。

读写

witev 允许您在一次调用中从多个缓冲区(固定大小的标头和字符数组)写入。您会产生单个系统调用的成本,内核中的套接字代码将数据组装到单个缓冲区中(如果可能),并进行单个网络调用。

于 2014-03-25T00:22:34.737 回答