X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fclient%2Fsock.c;h=b3be6157996fe7002661b783db2c055d7a382e45;hp=f4f4c556e82012c99927c721fe98697933c939d0;hb=f9589ac43999831fe995da5b1cb61a6db07967a3;hpb=c396513ae6f1ed149a7cd5cd6979a019aff6c327 diff --git a/src/client/sock.c b/src/client/sock.c index f4f4c55..b3be615 100644 --- a/src/client/sock.c +++ b/src/client/sock.c @@ -183,11 +183,13 @@ sdb_client_recv(sdb_client_t *client, while (42) { ssize_t status; + /* XXX: use select */ + errno = 0; status = sdb_strbuf_read(buf, client->fd, req); if (status < 0) { if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) - break; + continue; return status; } else if (! status) /* EOF */ @@ -213,6 +215,12 @@ sdb_client_recv(sdb_client_t *client, break; } + if (total != req) { + /* unexpected EOF; clear partially read data */ + sdb_strbuf_skip(buf, data_offset, sdb_strbuf_len(buf)); + return 0; + } + if (rstatus != UINT32_MAX) /* remove status,len */ sdb_strbuf_skip(buf, data_offset, 2 * sizeof(rstatus));