您不需要一次性连接所有字符串。这不会非常消耗 CPU,因为它无论如何都会发生在下面,但它可能会或可能不会消耗大量内存。
如果您在其中使用标志,send
那么您应该确定套接字缓冲区的大小。将您的字符串连接到该缓冲区大小,然后send
一次连接一个缓冲区
void send_strings(int sockfd, char ** strings, size_t numstrings, int flags) {
// get the socket write buffer size
int buflen;
unsigned int m = sizeof(bufsize);
if(getsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,(void *)&buflen, &m)) {
perror("getsockopt"); return; }
char buffer[buflen];
int bufsize = 0;
while (numstrings--) {
char * string = *(strings++);
size_t length = strlen(string);
// if the string would exceed the buffer
while (length > buflen - bufsize) {
memcpy(buffer + bufsize, string, buflen - bufsize);
length -= buflen - bufsize;
string += buflen - bufsize;
// send a full buffer
send(sockfd, buffer, buflen, flags);
bufsize = 0;
}
// copy the string into the buffer
memcpy(buffer + bufsize, string, length);
bufsize += length;
}
// send the rest
if (bufsize) {
send(sockfd, buffer, bufsize, flags);
}
}