Czytanie z gniazda i timeout...

0

Witam, piszę klasę do obsługi gniazdek TCP w WinSock, nazywa
się tak z angielska SimpleTcp ;-)

Mam w niej funkcję Read(), która czyta z gniazda przy pomocy
funkcji recv(), która blokuje wątek do czasu otrzymania danych.

Chciałem dodać do niej taką procedurę, którą posiadają serwery
SMTP czy FTP tzn. po pewnym czasie nieaktywności połączenie zostaje
automatycznie zerwane.

No i chciałem się dowiedzieć, jak coś takiego wykonać [???]

Napisałem, co prawda coś w stylu:

wątek A:

  • tworzy wątek B
  • recv() z gniazda
  • niszczy wątek B

wątek B:

  • czeka jakąś ilość czasu
  • zamyka gniazdo
    (co powoduje że funkcja recv() zwraca -1)

ale nie wydaje mi się żeby każdorazowe tworzenie osobnego
wątku dla każdego wywołania Read() było dobrym pomysłem.

Chociaż może i nie jest to niczym szkodliwym dla programu [???]

0

Przecież zamiast niszczyć ciągle wątek możesz go usypiać.
Możesz zobaczyć jak to mają zrobione niektóre komponenty, np. Indy.

0

Przecież zamiast niszczyć ciągle wątek możesz go usypiać.

Hmm... no ale jak go uśpię a wątek właśnie wykonuje Sleep,
to później jak go "obudzę" :-D to chyba nie zacznie wykonywać
procedury wątkowej od początku tylko od środka tego Sleepa
a mi zależy żeby jakoś tak od początku zaczęło...

Możesz zobaczyć jak to mają zrobione niektóre komponenty, np. Indy.

Oj powoli tracę nadzieję, grzebałem się w tych modułach aż trafiłem
do AntiFreezea i jak to jest wszystko powiązane to już nie wiem :-(

No nic, poszukam coś jeszcze i pokombinuję, thx...

1 użytkowników online, w tym zalogowanych: 0, gości: 1