send и максимальный размер
От: voody  
Дата: 03.06.03 18:34
Оценка:
всем добрый утро/день/вечер, помогите please с определением максимально размера строки,
которую можно передать с помощью send,
а то,например, 120кб передает нормально, а на 280кб программа просто вылетает без какой-либо ошибки?

заранее спасибо

04.06.03 05:13: Перенесено из 'WIN API'
Re: send и максимальный размер
От: Sashko Россия http://www.dc.baika.ru/
Дата: 04.06.03 03:03
Оценка:
>помогите please с определением максимально размера строки,
> которую можно передать с помощью send,
> а то,например, 120кб передает нормально, а на 280кб программа просто вылетает без какой-либо ошибки?

Не совсем понятно, что значит, программа вылетает без какой-либо ошибки, что возвращает send()?

Вообще вопрос не совсем корректный. На него нельзя ответить однозначно. Априорно, практически невозможно
определить сколько данных можно успешно отправить в данный момент, нужно всегда быть готовым что send()
обработает лишь часть данных, либо вообще скажет, что буфер полон и нужно ждать.

Есть возможность управлять размерами буферов TCP — SO_SNDBUF и SO_RSVBUF. Но это не гарантирует
(только может быть в самый первый вызов send()), что send будет успешно обрабатывать по SO_SNDBUF
байт за вызов.
Posted via RSDN NNTP Server 1.5
Re: send и максимальный размер
От: Vamp Россия  
Дата: 04.06.03 08:18
Оценка:
Здравствуйте, voody, Вы писали:

А сокет-то дейтаграммный или потоковый?
Да здравствует мыло душистое и веревка пушистая.
Re[2]: send и максимальный размер
От: voody  
Дата: 04.06.03 11:22
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Здравствуйте, voody, Вы писали:


V>А сокет-то дейтаграммный или потоковый?


Потоковый, и что из этого?
Re[3]: send и максимальный размер
От: Vamp Россия  
Дата: 04.06.03 12:05
Оценка:
Здравствуйте, voody, Вы писали:

Там вообще нет понятия максимального размера.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: send и максимальный размер
От: Tom Россия http://www.RSDN.ru
Дата: 04.06.03 12:14
Оценка:
S>Вообще вопрос не совсем корректный. На него нельзя ответить однозначно. Априорно, практически невозможно
S>определить сколько данных можно успешно отправить в данный момент, нужно всегда быть готовым что send()
S>обработает лишь часть данных, либо вообще скажет, что буфер полон и нужно ждать.
А реально кто нибудь на это натыкался?
... << RSDN@Home 1.0 beta 6a >>
Народная мудрось
всем все никому ничего(с).
Re[3]: send и максимальный размер
От: J.J.OK  
Дата: 04.06.03 12:48
Оценка:
Здравствуйте, Tom, Вы писали:

S>>Вообще вопрос не совсем корректный. На него нельзя ответить однозначно. Априорно, практически невозможно

S>>определить сколько данных можно успешно отправить в данный момент, нужно всегда быть готовым что send()
S>>обработает лишь часть данных, либо вообще скажет, что буфер полон и нужно ждать.
Tom>А реально кто нибудь на это натыкался?

а зачем натыкаться? — по всему — есть вероятность такого исхода — значит надо и писать соответственно. Разве нет?
Чем безопаснеe — тем неудобнее ;-)
Re: send и максимальный размер
От: Аноним  
Дата: 04.06.03 13:33
Оценка:
блокирующий или неблокирующий?

regards
Re[2]: send и максимальный размер
От: voody  
Дата: 04.06.03 16:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>блокирующий или неблокирующий?


А>regards

можно и такой и такой
Re[3]: send и максимальный размер
От: Аноним  
Дата: 04.06.03 16:53
Оценка:
Здравствуйте, voody, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


А>>блокирующий или неблокирующий?


А>>regards

V>можно и такой и такой

таки попробовать надо...
Re[3]: send и максимальный размер
От: Sashko Россия http://www.dc.baika.ru/
Дата: 05.06.03 01:28
Оценка: 6 (1)
> S>обработает лишь часть данных, либо вообще скажет, что буфер полон и нужно ждать.
> А реально кто нибудь на это натыкался?

Однозначно да (для чего же тогда в socket api есть FD_WRITE). При пересылке данных размером 100K,
на 100Mbit сетке, ты моет быть, этого никогда и не увидешь. Но попрововав запустить это же на
модемном соединении в 9600, обнаружишь мгновено.

Резюме: Программу, работающую с TCP и не обрабатывающую возврат send(), наивно полагая
об усепшной отсылке всего буфера, в морг.
Posted via RSDN NNTP Server 1.5
Re: send и максимальный размер
От: Michael Chelnokov Украина  
Дата: 05.06.03 20:05
Оценка:
Здравствуйте, voody, Вы писали:

V>а то,например, 120кб передает нормально, а на 280кб программа просто вылетает без какой-либо ошибки?


Что означает многозначительная фраза "вылетает"? Падает в hardware exception? Исходник в студию, плиз.
Re[2]: send и максимальный размер
От: voody  
Дата: 06.06.03 03:07
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, voody, Вы писали:


V>>а то,например, 120кб передает нормально, а на 280кб программа просто вылетает без какой-либо ошибки?


MC>Что означает многозначительная фраза "вылетает"? Падает в hardware exception? Исходник в студию, плиз.


вылетает, в данном случае означает что программа закрывается сама на обработке строчки типа
...
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (connect(sock,(struct sockaddr *)&addr,sizeof(addr))!=0) SetWindowText(hwConnect,"ERROR CONNECTED");
else SetWindowText(hwConnect,"Connect OK");

if (WSAAsyncSelect(sock,hDialogG,WM_USER+100,FD_READ|FD_CLOSE)==SOCKET_ERROR)
MessageBox(hwnd,"Error ",0,0);

вот прямо в этом send и вылетает, и точно изветсно что pFileCoded содержит только буквы
...
if (send(sock,pFileCoded,lstrlen(pFileCoded),0)==SOCKET_ERROR)
{
char szT098[100];
wsprintf(szT098,"Last=%d",WSAGetLastError());
MessageBox(hDialog,szT098,0,0);
}
..
Re[4]: send и максимальный размер
От: Tom Россия http://www.RSDN.ru
Дата: 06.06.03 07:08
Оценка:
S>Резюме: Программу, работающую с TCP и не обрабатывающую возврат send(), наивно полагая
S>об усепшной отсылке всего буфера, в морг.
Только не в морг, а к доктору
... << RSDN@Home 1.0 beta 6a >>
Народная мудрось
всем все никому ничего(с).
Re[3]: send и максимальный размер
От: Michael Chelnokov Украина  
Дата: 06.06.03 11:41
Оценка:
Здравствуйте, voody, Вы писали:

MC>>Что означает многозначительная фраза "вылетает"? Падает в hardware exception? Исходник в студию, плиз.


V>вот прямо в этом send и вылетает, и точно изветсно что pFileCoded содержит только буквы

V>...
V>if (send(sock,pFileCoded,lstrlen(pFileCoded),0)==SOCKET_ERROR)

Хмм... Очень похоже на аппаратное исключение. Ты точно уверен что pFileCoded указывает на куда надо и это "куда надо" имеет 0 в конце?
Re[4]: send и максимальный размер
От: voody  
Дата: 06.06.03 20:04
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, voody, Вы писали:


MC>>>Что означает многозначительная фраза "вылетает"? Падает в hardware exception? Исходник в студию, плиз.


V>>вот прямо в этом send и вылетает, и точно изветсно что pFileCoded содержит только буквы

V>>...
V>>if (send(sock,pFileCoded,lstrlen(pFileCoded),0)==SOCKET_ERROR)

MC>Хмм... Очень похоже на аппаратное исключение. Ты точно уверен что pFileCoded указывает на куда надо и это "куда надо" имеет 0 в конце?


уверен на 100%, тк при передачи около 100кб все ок, а при 280 все ужасно, а буффер резервируется на [500*1024]байт
Re[5]: send и максимальный размер
От: Michael Chelnokov Украина  
Дата: 07.06.03 12:33
Оценка:
Здравствуйте, voody, Вы писали:

V>>>вот прямо в этом send и вылетает, и точно изветсно что pFileCoded содержит только буквы

V>>>if (send(sock,pFileCoded,lstrlen(pFileCoded),0)==SOCKET_ERROR)

MC>>Хмм... Очень похоже на аппаратное исключение. Ты точно уверен что pFileCoded указывает на куда надо и это "куда надо" имеет 0 в конце?


V>уверен на 100%, тк при передачи около 100кб все ок, а при 280 все ужасно, а буффер резервируется на [500*1024]байт


Так, с размером понятно. Ноль на конце точно есть? (похоже на то что это lstrlen по мусору идет, а не send лажает)
Re[6]: send и максимальный размер
От: voody  
Дата: 08.06.03 04:38
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, voody, Вы писали:


V>>>>вот прямо в этом send и вылетает, и точно изветсно что pFileCoded содержит только буквы

V>>>>if (send(sock,pFileCoded,lstrlen(pFileCoded),0)==SOCKET_ERROR)

MC>>>Хмм... Очень похоже на аппаратное исключение. Ты точно уверен что pFileCoded указывает на куда надо и это "куда надо" имеет 0 в конце?


V>>уверен на 100%, тк при передачи около 100кб все ок, а при 280 все ужасно, а буффер резервируется на [500*1024]байт


MC>Так, с размером понятно. Ноль на конце точно есть? (похоже на то что это lstrlen по мусору идет, а не send лажает)


после pFileCoded=new char [500*1024];
выполняется ZeroMemory(pFileCoded,500*1024);
мне кажется что 0 дописывать еще раз бессмысленно?
Re[7]: send и максимальный размер
От: Sashko Россия http://www.dc.baika.ru/
Дата: 08.06.03 07:24
Оценка: +1
> MC>Так, с размером понятно. Ноль на конце точно есть? (похоже на то что это lstrlen по мусору идет, а не send лажает)
>
> после pFileCoded=new char [500*1024];
> выполняется ZeroMemory(pFileCoded,500*1024);
> мне кажется что 0 дописывать еще раз бессмысленно?

Да, бессмысленно, если только после этого ты не копируешь в pFileCoded 500Kb
данных не содержащих ни одного нуля.
Posted via RSDN NNTP Server 1.5
Re[4]: send и максимальный размер
От: msn  
Дата: 08.06.03 14:38
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Здравствуйте, voody, Вы писали:


V>Там вообще нет понятия максимального размера.


Нет есть.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.