X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fclient%2Fsock.c;h=0d734f3a9462ba74bb7405beb94c9fdeecb67d8a;hp=533e9e31b62c16457f36ae1e844a450251c26c51;hb=d25f3c59b5cf5387acd4e6d1467ce9efffa40f9a;hpb=f8809a7d245d9147bba60d907dd11a398941d868 diff --git a/src/client/sock.c b/src/client/sock.c index 533e9e3..0d734f3 100644 --- a/src/client/sock.c +++ b/src/client/sock.c @@ -33,9 +33,11 @@ #include "utils/error.h" #include "utils/strbuf.h" #include "utils/proto.h" +#include "utils/os.h" #include +#include #include #include @@ -248,10 +250,14 @@ ssize_t sdb_client_send(sdb_client_t *client, uint32_t cmd, uint32_t msg_len, const char *msg) { + char buf[2 * sizeof(uint32_t) + msg_len]; + if ((! client) || (! client->fd)) return -1; + if (sdb_proto_marshal(buf, sizeof(buf), cmd, msg_len, msg) < 0) + return -1; - return sdb_proto_send_msg(client->fd, cmd, msg_len, msg); + return sdb_write(client->fd, sizeof(buf), buf); } /* sdb_client_send */ ssize_t @@ -277,7 +283,7 @@ sdb_client_recv(sdb_client_t *client, while (42) { ssize_t status; - if (sdb_proto_select(client->fd, SDB_PROTO_SELECTIN)) + if (sdb_select(client->fd, SDB_SELECTIN)) return -1; errno = 0; @@ -298,9 +304,15 @@ sdb_client_recv(sdb_client_t *client, continue; if (rstatus == UINT32_MAX) { + const char *str = sdb_strbuf_string(buf) + data_offset; + size_t len = sdb_strbuf_len(buf) - data_offset; + ssize_t n; + /* retrieve status and data len */ - rstatus = sdb_proto_get_int(buf, data_offset); - rlen = sdb_proto_get_int(buf, data_offset + sizeof(rstatus)); + assert(len >= 2 * sizeof(uint32_t)); + n = sdb_proto_unmarshal_int32(str, len, &rstatus); + str += n; len -= (size_t)n; + sdb_proto_unmarshal_int32(str, len, &rlen); if (! rlen) break;