Odczytywanie innych wpisów przepełnienia stosu i dokumentacji boost::asio
potwierdziło, że nie ma synchronicznych wywołań odczytu/zapisu ASIO, które również zapewniają łatwy w użyciu limit czasu jako parametr połączenia.C++ Boost ASIO: jak czytać/pisać z limitem czasu?
Jestem w trakcie konwersji old-schoolowego gniazda Linux-a z wybranymi (2) połączeniami, które wykorzystują limity czasu i muszę zrobić mniej więcej to samo.
Jaki jest najlepszy sposób na zrobienie tego w boost::asio
? Patrząc na dokumentację Asio, jest wiele mylących przykładów różnych rzeczy związanych z timerem, ale jestem bardzo zdezorientowany.
Chciałbym zobaczyć prosty do odczytania przykład: Odczytać z gniazda, ale odczekać maksymalnie X sekund, po którym funkcja albo wraca z niczym, albo wraca z czymkolwiek, co było w stanie. do odczytu z gniazda przed upływem limitu czasu.
Proszę wyjaśnić, co jest mylące w tym przykładzie: http://think-async.com/Asio/asio-1.4.7/src/examples/timeouts/blocking_tcp_client.cpp - Zasadniczą logiką jest, że despatch 2 asynchroniczne zadania, jeden odczyt/zapis, a drugi to time-out, jeśli odczyt/zapis zwróci najpierw zabicie terminatora, jeśli timer zwróci logikę to odczyt/zapis jest wciąż wyjątkowy - od tego momentu kontynuujesz swoją logikę time-out. bardzo, bardzo prosty. –
Istnieje jedna narożna sprawa, która może pojawić się w sieci hf, która jest związana z kolejkowaniem wywołań zwrotnych. licznik czasu oczekiwania cb jest w kolejce, a następnie odczyt/zapis jest w kolejce. napotkasz timeout cb i zaczniesz wykonywać logikę time-out, kiedy w rzeczywistości skończy się odczyt/zapis, możliwe rozwiązanie, które widziałem, jest podobne do blokady podwójnego sprawdzania - w skrócie wykonaj dodatkowy czas oczekiwania po zwrocie pierwszego czasu, ale to ma taki sam problem, jeśli odczyt/zapis jest w kolejce po drugim limicie czasu jest kolejka ... –
Po prostu pamiętaj, że limit czasu jest trudnym warunkiem, mówisz, że nie dostanę czegoś w pewnej ilości czas, zrobię coś konkretnego - dotyczy to również faktu, że odczyt/zapis mógł już się odbyć i jest na dobrej drodze, co nie zmienia faktu, że nie otrzymałeś go jeszcze. –