Клиентский код

Начал писать библиотеку с интерфейсом, которую будет использовать клиент. В папке ds/utils/ds_client/ создал папку lib. Код прокомментировал. 
1. КЛиентская библиотека находится в папке ds/utils/ds_client/lib и называется ds_cl.c. В ней пока реализованны функции - инициализация соединения con_handle_init(), подключение к хосту ds_connect(struct con_handle *con,char *ip,int port), отправка объекта на сервер ds_put_object(struct con_handle *con,struct ds_obj_id id, void *data, uint32_t data_size, uint64_t *off). В функции ds_put_object() объект нарезается на ds_packets (куски объекта) и по очереди отправляются на сервер.
2. Отредактировал код клиента ds/utils/ds_client/ds_client.c. Моделировалась такая ситуация. У клиента создается массив подключений struct con_handle, объект struct object. В цикле, клиент инициализирует три подключения для трех хостов. Потом он подключается к двум хостам ds_connect().  В obj.id заносится сгенерированный id. В obj.data записывается тестовая строка из 50 символов, офсет выставлен в начало (0). Дальше клиент хочет хранить половину объекта на одном хосте, вторую на другом .Он вызывает два раза ds_create_object (функция еще не готова) для резервирования места, размером (sizeof(obj.data_size)/2). Далее вызывается ds_put_object(), в нем половина объекта делится на 5 частей и отправляется на сервер, и потом еще раз для оптравки другой половины другому клиенту. Все куски имеют внутри себя id объекта, размер данных и смещение относительно начала, поэтому из этих кусков можно легко собрать объект заново. В конце клиент сбрасывает все соединения.
3. Хидер библиотеки ds_cl положил в /include, чтобы сервер мог видеть структуры. В ds_cl.h находятся определения для соединения con_handle, частей объектов ds_packet, объект object.
4. В папке ds/utils/ds_client/lib создал файл cl_crt.c, в котором реализованны функции crt_malloc,crt_free,... для юзерспейс.
5. В папке ds/utils/ds_client/lib создал файл random.c, в котором реализована функция ds_random_buf_read() для чтения данных из /dev/urandom в юзерспейс.

добавить поле uint64_t obj_size; добавить поле int error - это поле для сервера. сервер будет проставлять код  ошибки(если есть). кроме того data[PAGE_SIZE] заменить на void *data и аллоцировать по мере необъодимости. сеанс связи с сервером должен выглядеть так:
send(pkt, sizeof(pkt)); 
send(pkt->data, pkt->data_size);
recv(pkt, sizeof(pkt);
if (pkt->error) //do report - server returns error