diff --git a/src/hidapi/linux/hid.c b/src/hidapi/linux/hid.c index 2c7128f45..5fa2db4ba 100644 --- a/src/hidapi/linux/hid.c +++ b/src/hidapi/linux/hid.c @@ -826,15 +826,23 @@ int HID_API_EXPORT hid_set_nonblocking(hid_device *dev, int nonblock) return 0; /* Success */ } - int HID_API_EXPORT hid_send_feature_report(hid_device *dev, const unsigned char *data, size_t length) { + static const int MAX_RETRIES = 50; + int retry; int res; - res = ioctl(dev->device_handle, HIDIOCSFEATURE(length), data); - if (res < 0) - perror("ioctl (SFEATURE)"); + for (retry = 0; retry < MAX_RETRIES; ++retry) { + res = ioctl(dev->device_handle, HIDIOCSFEATURE(length), data); + if (res < 0 && errno == EPIPE) { + /* Try again... */ + continue; + } + if (res < 0) + perror("ioctl (SFEATURE)"); + break; + } return res; }