diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-09-05 14:30:30 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-09-11 09:47:11 +0200 |
| commit | d83a98096b8675905d78c6fd4e6af1091c2f663e (patch) | |
| tree | cee9f310fabce2b363e50919df80235cf28747c3 /src/lib | |
| parent | 5de032049eed3ce62df018e72b93af66d3ea199b (diff) | |
Don't throw an exception if reading a encode server response fails (#2320).
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/encode_server_finder.cc | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc index 200286fd9..e01019a8c 100644 --- a/src/lib/encode_server_finder.cc +++ b/src/lib/encode_server_finder.cc @@ -220,16 +220,24 @@ EncodeServerFinder::handle_accept (boost::system::error_code ec) return; } - uint32_t length; - _accept_socket->read (reinterpret_cast<uint8_t*>(&length), sizeof(uint32_t)); - length = ntohl (length); + string server_available; - scoped_array<char> buffer(new char[length]); - _accept_socket->read (reinterpret_cast<uint8_t*>(buffer.get()), length); + try { + uint32_t length; + _accept_socket->read (reinterpret_cast<uint8_t*>(&length), sizeof(uint32_t)); + length = ntohl (length); + + scoped_array<char> buffer(new char[length]); + _accept_socket->read (reinterpret_cast<uint8_t*>(buffer.get()), length); + server_available = buffer.get(); + } catch (NetworkError&) { + /* Maybe the server went away; let's just try again */ + start_accept(); + return; + } - string s (buffer.get()); auto xml = make_shared<cxml::Document>("ServerAvailable"); - xml->read_string (s); + xml->read_string(server_available); auto const ip = _accept_socket->socket().remote_endpoint().address().to_string(); bool changed = false; |
