diff options
author | Neil Moore <neil@s-z.org> | 2014-07-06 16:02:27 -0400 |
---|---|---|
committer | Neil Moore <neil@s-z.org> | 2014-07-06 16:04:07 -0400 |
commit | 8cb84b89476a88601f6e085435cfd7fa74f9fcb0 (patch) | |
tree | bb3c6f182e05beb96f40143519e56fe941285cd6 /crawl-ref/source/tileweb.cc | |
parent | 155ebc9998ecbd3e42b46f77786773d19b1af653 (diff) | |
download | crawl-ref-8cb84b89476a88601f6e085435cfd7fa74f9fcb0.tar.gz crawl-ref-8cb84b89476a88601f6e085435cfd7fa74f9fcb0.zip |
Modify webtiles socket timeouts, simplify.
We were accidentally starting out with five-second waits in webtiles
then scaling down to 500 ms; that was backwards. Also use the longer
500 ms timeouts for ENOBUFS, etc., not just EAGAIN.
Diffstat (limited to 'crawl-ref/source/tileweb.cc')
-rw-r--r-- | crawl-ref/source/tileweb.cc | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/crawl-ref/source/tileweb.cc b/crawl-ref/source/tileweb.cc index a0d005d3d7..70c9624e83 100644 --- a/crawl-ref/source/tileweb.cc +++ b/crawl-ref/source/tileweb.cc @@ -206,38 +206,29 @@ void TilesFramework::finish_message() ssize_t retval = sendto(m_sock, fragment_start + sent, fragment_size - sent, 0, (sockaddr*) &m_dest_addrs[i], sizeof(sockaddr_un)); - if (retval == -1) + if (retval <= 0) { + const char *errmsg = retval == 0 ? "No bytes sent" + : strerror(errno); if (--retries <= 0) - die("Socket write error: %s", strerror(errno)); + die("Socket write error: %s", errmsg); - if (errno == ECONNREFUSED || errno == ENOENT) + if (retval == 0 || errno == ENOBUFS || errno == EWOULDBLOCK + || errno == EINTR || errno == EAGAIN) + { + // Wait for half a second at first (up to five), then + // try again. + usleep(retries <= 10 ? 5000 * 1000 : 500 * 1000); + } + else if (errno == ECONNREFUSED || errno == ENOENT) { // the other side is dead m_dest_addrs.erase(m_dest_addrs.begin() + i); i--; break; } - else if (errno == ENOBUFS || errno == EWOULDBLOCK - || errno == EINTR) - { - // Wait for up to half a second, then try again - usleep(retries <= 5 ? 500 * 1000 : 10 * 1000); - } - else if (errno == EAGAIN) - { - // Wait longer after a few attempts - usleep(retries <= 10 ? 500 * 1000 : 5000 * 1000); - } else - die("Socket write error: %s", strerror(errno)); - } - else if (retval <= 0) - { - if (--retries <= 0) - die("Socket write error: retval <= 0"); - - usleep(retries <= 5 ? 500 * 1000 : 10 * 1000); + die("Socket write error: %s", errmsg); } else sent += retval; |