summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 09f52d6)
raw | patch | inline | side by side (parent: 09f52d6)
author | Sebastian Harl <sh@tokkee.org> | |
Fri, 10 Jan 2014 08:06:33 +0000 (09:06 +0100) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Fri, 10 Jan 2014 08:06:33 +0000 (09:06 +0100) |
src/utils/unixsock.c | patch | blob | history |
diff --git a/src/utils/unixsock.c b/src/utils/unixsock.c
index 59bf5631f451e4f401883532e8cd9b1dc4c8791d..da992c94b51601024bc03e2988ca9ff8d7a1e9d8 100644 (file)
--- a/src/utils/unixsock.c
+++ b/src/utils/unixsock.c
sdb_unixsock_client_recv(sdb_unixsock_client_t *client,
char *buffer, size_t buflen)
{
+ char *tmp;
+
if ((! client) || (! client->fh) || (! buffer))
return NULL;
if (client->shutdown & SDB_SHUT_RD) /* reconnect */
sdb_unixsock_client_connect(client);
- buffer = fgets(buffer, (int)buflen - 1, client->fh);
- if (! buffer) {
- if (! feof(client->fh)) {
- char errbuf[1024];
- sdb_log(SDB_LOG_ERR, "unixsock: Failed to read "
- "from socket (%s): %s", client->path,
- sdb_strerror(errno, errbuf, sizeof(errbuf)));
+ tmp = NULL;
+ while (tmp == NULL) {
+ errno = 0;
+ tmp = fgets(buffer, (int)buflen - 1, client->fh);
+ if (! tmp) {
+ if ((errno == EAGAIN) || (errno == EINTR))
+ continue;
+
+ if (! feof(client->fh)) {
+ char errbuf[1024];
+ sdb_log(SDB_LOG_ERR, "unixsock: Failed to read "
+ "from socket (%s): %s", client->path,
+ sdb_strerror(errno, errbuf, sizeof(errbuf)));
+ }
+ return NULL;
}
- return buffer;
}
buffer[buflen - 1] = '\0';