+ pdu_size = rpc_get_pdu_size(rpc->inbuf);
+ if (rpc->insize < pdu_size) {
+ unsigned char *buf;
+
+ buf = malloc(pdu_size);
+ if (buf == NULL) {
+ rpc_set_error(rpc, "Failed to allocate buffer of %d bytes for pdu, errno:%d. Closing socket.", pdu_size, errno);
+ return -1;
+ }
+ memcpy(buf, rpc->inbuf, rpc->insize);
+ free(rpc->inbuf);
+ rpc->inbuf = buf;
+ rpc->insize = rpc_get_pdu_size(rpc->inbuf);
+ }
+
+ size = available;
+ if (size > rpc->insize - rpc->inpos) {
+ size = rpc->insize - rpc->inpos;
+ }
+
+ count = read(rpc->fd, rpc->inbuf + rpc->inpos, size);