powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сокет закрывается самостоятельно?
13 сообщений из 13, страница 1 из 1
Сокет закрывается самостоятельно?
    #39954488
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принимаю пакеты по UDP какое-то время, все хорошо. Наступает час х и пакеты перестают приходить.
Все делается на локальной машине, WireShark продолжает ловить пакеты. Может сокет самостоятельно закрылся, а я не в курсе? Подскажите в чем может быть дело?

Прием осуществляю следующей процедурой

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 if  WSARecv(SOCKET_RECV, @fBufPtr, 1, fSizePacket, Flags, @fOverlapped, nil) = 0 then
  begin
      while not Terminated do begin
       
         if WSAGetOverlappedResult(SOCKET_RECV, @fOverlapped, cbTransfer, False,  Flags) then
        begin
          {получили данные}
           Break;
        end
        else
        begin
          {ошибки}
          WSAError:= WSAGetLastError;
          if WSAError <> WSA_IO_INCOMPLETE then begin
           break;
          end
          else sleep(1);
        end;
      end;
  end
  else begin
    WSAError:= WSAGetLastError;
    if WSAError = WSA_IO_PENDING then
    sleep(5);
  end;
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954489
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я закрою сокет самостоятельно, то ошибка будет WSAGetLasrError = 10038, так что НОРМАЛЬНОЕ закрытие сокета не происходит, я бы видел это в логе. Что остается?
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954555
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbЧто остается?

Остаётся первое и единственное ощущение от твоего кода: где ты списал этот бред? Никогда
больше туда не ходи. Выкинь overlapped, выкинь WSARecv, используй простой recv() в
блокирующем режиме.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954576
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, этот бред работает в разы быстрее recv и нашел я его в книжке "О чём не пишут в книгах по Delphi." А. Б. Григорьев
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954579
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbэтот бред работает в разы быстрее recv и нашел я его в книжке

Во-первых, не верю.
Во-вторых, и в книжках пишут полную чушь, Архангельский тому подтверждение.
В-третьих, этот код способен зацикливаться без вызова чтения или ошибка может быть
совершенно в другом месте. Отлаживайся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954590
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, а как он может зациклиться?
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954592
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbа как он может зациклиться?

Например, если WSAGetLastError() в цикле вернёт 0 хоть раз. Без нового вызова WSARecv
подписка на событие в overlapped структуре не возобновится и твой цикл будет бесконечно
ждать его возведения. Отлаживайся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954611
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, это да, но этот кусок кода тоже в цикле только уже в Exeute потока
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954620
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно без разницы где наружный цикл если у тебя внутренний никогда не прервётся.
Отлаживайся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954633
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Например, если WSAGetLastError() в цикле вернёт 0 хоть раз. Без нового вызова WSARecv
подписка на событие в overlapped структуре не возобновится и твой цикл будет бесконечно
ждать его возведения.


Код: pascal
1.
2.
3.
4.
5.
  {ошибки}
  WSAError:= WSAGetLastError;
  if WSAError <> WSA_IO_INCOMPLETE then 
    break
  else sleep(1); 



зацикливание будет только при условии WSAError = WSA_IO_INCOMPLETE, но эта ошибка означает только то, что операция чтения не завершена и нужно вызывать WSAGetOverlappedResult до посинения. В этом и заключается работа с сокетом. Ну или я вообще не понимаю, что вы говорите.
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954644
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbэта ошибка означает только то, что операция чтения не завершена

Если быть точным, это означает, что event в структуре overlapped не взведён. А он никогда
и не станет таким если по каким-то причинам подписка на событие отпала. Отлаживайся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954669
misha mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, что по теме, но фаерволы и прочие NATы прикрывают входящий канал после определенного периода неактивности по паре исходящий_адрес:исходящий_порт <-> входящий_адрес:входящий_порт . И делают они это не из вредности, а потому, что иначе нельзя. Не понятно, отваливается у вас связь просто через какое-то время, или через время бездействия?
...
Рейтинг: 0 / 0
Сокет закрывается самостоятельно?
    #39954706
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пакеты летят постоянно, простоя нет. Дмитрий ткнул носом в место, в котором скорее всего закрылась ошибка веры ))
вообщем тесты покажут. не быстрое это дело
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сокет закрывается самостоятельно?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]