[英]Transmitting variable structure size with Berkeley socket over a TCP connection
我在C中定义了以下结构,我想使用Berkeley Socket通过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;
}
非常感谢。
考虑使用分散聚集读写技术。
wtitev允许您在单个调用中从多个缓冲区(固定大小的标头和char数组)进行写入。 您要承担单个系统调用的费用,内核中的套接字代码将数据组装到单个缓冲区(如果可能)中,并进行单个网络调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.