- bytes_read = p2pkp_msgrecv(ps->net_sock, sin, ps->buffer, ps->buffer_len);
- DEBUG("XXX: received %d bytes\n", bytes_read);
- if (bytes_read > 0) {
- bytes_written = p2pkp_write_in_file(file, ps->buffer, bytes_read);
- err = 0;
- } else if (bytes_read < 0) {
- ERROR("cannot read data");
- err = -ENXIO;
- }
+ do {
+ bytes_read = p2pkp_msgrecv(ps->net_sock, sin, ps->buffer, ps->buffer_len);
+ if (bytes_read > 0) {
+ bytes_written += p2pkp_write_in_file(file, ps->buffer, bytes_read);
+ err = 0;
+ } else if (bytes_read != -ERESTARTSYS) {
+ ERROR("cannot read data: %d", bytes_read);
+ err = -ENXIO;
+ }
+ DEBUG("wrote %d", bytes_written);
+ } while (bytes_read < ps->buffer_len);
+