RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Максимальный размер данных в TCP пакете???


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : ErOs2, http://eros2.by.ru
To : beepper
Subj : Максимальный размер данных в TCP пакете???

> Привет всем! Возникла необходимость написать одну сетевую программу (клиент - сервер) и в процессе написания появился вопрос: какой максимальный размер данных можно отправить функцией send()? У меня больше 24К не получается (дальше данные искажены). И может кто подскажет эффективный алгоритм отправки больших массивов данных(от 1-го до 200Мб)?

send возвращает кол-во отправленных байт. Так что если отправлено меньше чем нужно - сдвигаешь указатель на кол-во отправленного и посылаешь дальше.


Так я делал в VNC:

////////////////////////////
#define MAXSENDSIZE 32767

inline int safesend(int socket, const void *buf, int len, int flags)
{
if (len > MAXSENDSIZE) len = MAXSENDSIZE;
return send(socket, buf, len, flags);
}

VInt VSocket::Send(const char *buff, const VCard bufflen)
{
int blen = bufflen;

while (blen > 0)
{
int n = safesend(sock, buff, blen, 0);

if (n <= 0) return n;

blen -= n;
buff += n;
}

return bufflen;
}

////////////////////////////


Fri 26 Aug 2005 09:04 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.7.10) Gecko/2005




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.