【发布时间】:2014-06-01 10:37:58
【问题描述】:
我正在编写一个函数,用于通过套接字发送包含某些数据大小的标头,然后是数据本身。 send() 采用一个指针和一个大小并从该指针读取/发送。我想使用一个函数,它需要两个指针和两个大小,并从第一个指针读取/发送,然后在到达第一个指针的末尾时切换到第二个指针。这样,我就可以在负载数据之前发送标头,而无需对系统网络堆栈进行额外调用或复制内存。
这是我目前的功能。我必须先使用一个额外的发送循环来发送标头:
int send_size(int socket, uint8_t* buf, size_t len){
if (!buf) return INVALID_INPUT;
uint8_t header[4];
for (int i = 0; i<4; i++){ // Put size of data into 4-byte header, little endian.
header[i] = len%256;
len = len/256;
}
size_t bytesRemaining = len + 4;
size_t sent;
while (bytesRemaining > len){ // Send header.
sent = send(socket, header, bytesRemaining - len, SO_NOSIGPIPE);
if (sent==-1) return NETWORK_ERROR;
bytesRemaining -= sent;
}
while (bytesRemaining > len){ // Send payload.
sent = send(socket, buf, bytesRemaining, SO_NOSIGPIPE);
if (sent==-1) return NETWORK_ERROR;
bytesRemaining -= sent;
}
return NO_ERROR;
}
我宁愿有一个发送循环,告诉我的系统将两个数组一起发送,这样我就不必经常调用 send()。
【问题讨论】:
-
您需要创建由 2 个原始数组组成的第三个数组并发送它