Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить сколько данных я могу записать в сокет...


Страницы:   1 2

Jolik ©   (2004-08-05 13:32:00) 

Вот сколько получено я могу запросить у сокета (через ioctrl), а как узнать сколько я могу записать в асинх.сокет? Ведь у виндов тоже свои буфера в АйПи стеке есть... Если я неограниченно много начну записывать, они ведь должны переполниться. или я что-то не понимаю...


Anatoly Podgoretsky   (2004-08-05 15:21:00) [21]

Это поток, количество не ограничено, хоть пентабайты посылай


Rouse_   (2004-08-05 15:16:00) [22]

send вернет тебе количество байт помещенных в буффер
если send вернул WSAEWOULDBLOCK значит пока еще идет передача (буффер не пуст), в этом случае ожидай FD_WRITE которое сообщит тебе о завершении передачи данных.
А еще лучше воспользоваться моделью перекрытого ввода-вывода, а именно WSASend. Я обычно пользуюсь WSASend с процедурами завершения а не уведомлении о собвтии. но это тебе решать. Факт, что она тебе сама сообщит о окончании передачи или о ошибке а также о количестве байт перемещенных во время операции...


Jolik   (2004-08-05 14:51:00) [23]

Я тк понимаю:
send на асинхронном сокете может вернуть WSAEWOULDBLOCK - это значит, я сейчас ниче передавать не буду, а передам когда у меня будет время. При этом буфер с данными переданный в send копируется в системные буфера АйПи стека и передается когда появится возможность. Т.е. для программиста это все равно что полностью передано. Так вот, если быстро толкать данные, send постоянно возвращает WSAEWOULDBLOCK (т.е. буферирует мои данные до лучших времен), и до каких пор?
А если напередавал я из файла 256 кБайт важнейшей информации, которая сбуферировалась в стеке АйПи. файл удалил. А соединение возьми и разорвись. Где теперь мои данные? Как узнать, сколько успело передаться? 100 байт или 100 килобат?
Спасибо!


Digitman   (2004-08-05 13:36:00) [24]

ты не волнуйся за это - ф-ция send() вернет тебе результатом число реально записанных байт в буфер передачи


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо