Конференция "Сети" » Вопрос про сокеты, а точнее про FD_CLOSE и FD_READ [D6, Win95/98, WinME, Win2k, WinXP]
 
  • имя (05.02.08 19:35) [40]
    Удалено модератором
  • ага (06.02.08 13:22) [41]
    Просмотрел бегло, может уже сказано, но не заметил.

    Нормально это, FIN пришел вместе с последним пакетом. Сервер закончил запись и вызвал shutdown на свой передающий конец - типа больше ниче передавать не буду. Сокет отправил все из буфера и с последним пакетом - FIN. Получив его, нужно вычерпать все из буфера и закрыть свой приемный конец.
  • effingtet (04.02.09 17:32) [42]
    Соберем для Вас по сети интернет
    базу данных потенциальных клиентов для Вашего Бизнеса!!!
    Соберем данных Много!!! Быстро!!! Недорого!!!
    Название телефон факс e-mail www адрес имена итд
    Узнайте подробности по телефону: +79133913837
    ICQ: 6288862
    Email: rassilka.agent@gmail.com
    Skype: prodawez
  • FireMan_Alexey (04.02.09 18:29) [43]
    Сделай так:

    While True do
    Begin
     Err:=Recv(...);
     IF err=SOCKET_ERROR and WSAGetLastError=WSAEWOULDBLOCK Then
       Break;
    End;
    Event - сигнализирует о приходе данных, а IOCTLSocket - покажет всего 8192 макс хотя там может быть и больше :) (проверенно экспериментально)
    А вообще лучше использовать Select в потоках :) тоже экспериментально :)
    Я тоже пытался прокси на Эвентах написать, но столкнулся с такой же ситуацией и с не закрытыми соединениями со стороны апачей :).
    Спасло только то что весь код переделал под синхронные сокеты.
  • !"№;%:?* (12.03.09 07:30) [44]
    При известном количестве данных - читай сколько указано в заголовке, recv вернет ошибку если соединение будет закныто раньше.

    В отдельном потоке, можно и блокирующими сокетами обойтись.
  • Palladin © (12.03.09 08:28) [45]

    > FireMan_Alexey   (04.02.09 18:29) [43]

    А ничего что год прошел? :)
 
Конференция "Сети" » Вопрос про сокеты, а точнее про FD_CLOSE и FD_READ [D6, Win95/98, WinME, Win2k, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0]