THRIFT-4386 Add Lua 5.3/5.4 support
Clint: lua
Patch: Thomas Bruggink
This closes #3012
diff --git a/lib/lua/src/usocket.c b/lib/lua/src/usocket.c
index 21c0bac..27103a0 100644
--- a/lib/lua/src/usocket.c
+++ b/lib/lua/src/usocket.c
@@ -205,21 +205,35 @@
return socket_wait(sock, WAIT_MODE_C, timeout);
}
+#define SEND_RETRY_COUNT 5
T_ERRCODE socket_send(
p_socket sock, const char *data, size_t len, int timeout) {
int err, put = 0;
if (*sock < 0) {
return CLOSED;
}
- do {
- put = send(*sock, data, len, 0);
- if (put > 0) {
- return SUCCESS;
- }
- } while ((err = errno) == EINTR);
+ for(int i = 0; i < SEND_RETRY_COUNT; i++) {
+ do {
+ size_t l = len - put;
+ put = send(*sock, data + put, l, 0);
+ if (put > 0) {
+ if(put == l) {
+ return SUCCESS;
+ }
+ // Not all data was delivered, we need to try again.
+ err = EAGAIN;
+ break;
+ }
+ } while ((err = errno) == EINTR);
- if (err == EAGAIN) {
- return socket_wait(sock, WAIT_MODE_W, timeout);
+ if (err == EAGAIN) {
+ err = socket_wait(sock, WAIT_MODE_W, timeout);
+ // Check if the socket is available again and try to resend.
+ if(err == SUCCESS) {
+ continue;
+ }
+ }
+ break;
}
return err;