здесь: http://www.ecst.csuchico.edu/~beej/guide/net/html/advanced.html#sendall
говориться о том, что даже если я сделал send() это не гарантирует, что весь буфер уйдет, поэтому они рекомендуют сделать такой метод:
#include <sys/types.h>
#include <sys/socket.h>
int sendall(int s, char *buf, int *len)
{
int total = 0; // how many bytes we've sent
int bytesleft = *len; // how many we have left to send
int n;
while(total < *len) {
n = send(s, buf+total, bytesleft, 0);
if (n == -1) { break; }
total += n;
bytesleft -= n;
}
*len = total; // return number actually sent here
return n==-1?-1:0; // return -1 on failure, 0 on success
}
и для использования:
char buf[10] = "Beej!";
int len;
len = strlen(buf);
if (sendall(s, buf, &len) == -1) {
perror("sendall");
printf("We only sent %d bytes because of the error!\n", len);
}
далее, данные, которые будут отсылаться могут быть довольно большими (100кб). если использование вышеприведенного метода реально, то получается, что мне не обязательно все свои данные засовывать в один буфер, а я могу насобирать односвязный список например буферов, и потом пройдясь по ним и вызвав для каждого sendall() гарантированно отправить все.
Правильный ли это подход?