Форум: "Сети";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];
ВнизВопрос про сокеты, а точнее про FD_CLOSE и FD_READ Найти похожие ветки
← →
имя (2008-02-05 19:35) [40]Удалено модератором
← →
ага (2008-02-06 13:22) [41]Просмотрел бегло, может уже сказано, но не заметил.
Нормально это, FIN пришел вместе с последним пакетом. Сервер закончил запись и вызвал shutdown на свой передающий конец - типа больше ниче передавать не буду. Сокет отправил все из буфера и с последним пакетом - FIN. Получив его, нужно вычерпать все из буфера и закрыть свой приемный конец.
← →
имя (2009-02-04 17:32) [42]Удалено модератором
← →
FireMan_Alexey (2009-02-04 18:29) [43]Сделай так:
While True do
Begin
Err:=Recv(...);
IF err=SOCKET_ERROR and WSAGetLastError=WSAEWOULDBLOCK Then
Break;
End;
Event - сигнализирует о приходе данных, а IOCTLSocket - покажет всего 8192 макс хотя там может быть и больше :) (проверенно экспериментально)
А вообще лучше использовать Select в потоках :) тоже экспериментально :)
Я тоже пытался прокси на Эвентах написать, но столкнулся с такой же ситуацией и с не закрытыми соединениями со стороны апачей :).
Спасло только то что весь код переделал под синхронные сокеты.
← →
!"№;%:?* (2009-03-12 07:30) [44]При известном количестве данных - читай сколько указано в заголовке, recv вернет ошибку если соединение будет закныто раньше.
В отдельном потоке, можно и блокирующими сокетами обойтись.
← →
Palladin © (2009-03-12 08:28) [45]
> FireMan_Alexey (04.02.09 18:29) [43]
А ничего что год прошел? :)
Страницы: 1 2 вся ветка
Форум: "Сети";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.005 c