static ssize_t cftp_send_data_retry(struct cftp_descriptor *desc, const void *buff, size_t size, int retry) { ssize_t sendlen; int ret; while (retry--) { sendlen = cftp_send_data(desc, buff, size); if (sendlen < 0) { return sendlen; } ret = cftp_can_receive(desc); if (ret < 0) { return ret; } else if (ret > 0) { return sendlen; } println("timeout retry = %d", retry); } return -ETIMEDOUT; }
static ssize_t cftp_receive_data_timeout(struct cftp_descriptor *desc, void *buff, size_t size) { int ret; if (desc->receive_timeout) { return desc->receive_timeout(desc->data, buff, size, desc->timeout_value); } ret = cftp_can_receive(desc); if (ret <= 0) { return -ETIMEDOUT; } return cftp_receive_data(desc, buff, size); }