summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tileweb.cc
diff options
context:
space:
mode:
authorNeil Moore <neil@s-z.org>2014-07-06 16:02:27 -0400
committerNeil Moore <neil@s-z.org>2014-07-06 16:04:07 -0400
commit8cb84b89476a88601f6e085435cfd7fa74f9fcb0 (patch)
treebb3c6f182e05beb96f40143519e56fe941285cd6 /crawl-ref/source/tileweb.cc
parent155ebc9998ecbd3e42b46f77786773d19b1af653 (diff)
downloadcrawl-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.cc35
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;