#define WS_BLOCK 1
#define WS_NOBLOCK 0
+#define WS_INIT_SANITY 5000
+#define WS_WRITE_SANITY 2000
+
#define SHA1_HASH_SIZE 20
static const char c64[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
KS_DECLARE(ks_ssize_t) kws_raw_write(kws_t *kws, void *data, ks_size_t bytes)
{
ks_ssize_t r;
- int sanity = 2000;
+ int sanity = WS_WRITE_SANITY;
int ssl_err = 0;
ks_size_t wrote = 0;
wrote += r;
}
- if (sanity < 2000) {
- ks_sleep_ms(1);
+ if (sanity < WS_WRITE_SANITY) {
+ int ms = 1;
+
+ if (kws->block) {
+ if (sanity < WS_WRITE_SANITY * 3 / 4) {
+ ms = 60;
+ } else if (sanity < WS_WRITE_SANITY / 2) {
+ ms = 10;
+ }
+ }
+ ks_sleep_ms(ms);
}
if (r == -1) {
wrote += r;
}
- if (sanity < 2000) {
- ks_sleep_ms(1);
+ if (sanity < WS_WRITE_SANITY) {
+ int ms = 1;
+
+ if (kws->block) {
+ if (sanity < WS_WRITE_SANITY * 3 / 4) {
+ ms = 60;
+ } else if (sanity < WS_WRITE_SANITY / 2) {
+ ms = 10;
+ }
+ }
+ ks_sleep_ms(ms);
}
} while (--sanity > 0 && ((r == -1 && ks_errno_is_blocking(ks_errno())) || (kws->block && wrote < bytes)));
}
kws->sock = sock;
- kws->sanity = 5000;
+ kws->sanity = WS_INIT_SANITY;
kws->ssl_ctx = ssl_ctx;
kws->buflen = 1024 * 64;
-Mon Oct 10 15:54:37 CDT 2016
+Sun Dec 4 12:46:08 CST 2016
#define WS_BLOCK 1
#define WS_NOBLOCK 0
+#define WS_INIT_SANITY 5000
+#define WS_WRITE_SANITY 2000
+
#define SHA1_HASH_SIZE 20
struct ws_globals_s ws_globals;
ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
{
ssize_t r;
- int sanity = 2000;
+ int sanity = WS_WRITE_SANITY;
int ssl_err = 0;
size_t wrote = 0;
wrote += r;
}
- if (sanity < 2000) {
- ms_sleep(1);
+ if (sanity < WS_WRITE_SANITY) {
+ int ms = 1;
+
+ if (wsh->block) {
+ if (sanity < WS_WRITE_SANITY * 3 / 4) {
+ ms = 60;
+ } else if (sanity < WS_WRITE_SANITY / 2) {
+ ms = 10;
+ }
+ }
+ ms_sleep(ms);
}
if (r == -1) {
wrote += r;
}
- if (sanity < 2000) {
- ms_sleep(1);
+ if (sanity < WS_WRITE_SANITY) {
+ int ms = 1;
+
+ if (wsh->block) {
+ if (sanity < WS_WRITE_SANITY * 3 / 4) {
+ ms = 60;
+ } else if (sanity < WS_WRITE_SANITY / 2) {
+ ms = 10;
+ }
+ }
+ ms_sleep(ms);
}
} while (--sanity > 0 && ((r == -1 && xp_is_blocking(xp_errno())) || (wsh->block && wrote < bytes)));
//printf("wRITE FAIL: %s\n", strerror(errno));
//}
- return r;
+ return r < 0 ? r : wrote;
}
#ifdef _MSC_VER
wsh->sock = sock;
wsh->block = block;
- wsh->sanity = 5000;
+ wsh->sanity = WS_INIT_SANITY;
wsh->ssl_ctx = ssl_ctx;
wsh->stay_open = stay_open;
#define WS_BLOCK 1
#define WS_NOBLOCK 0
+#define WS_INIT_SANITY 5000
+#define WS_WRITE_SANITY 2000
+
#define SHA1_HASH_SIZE 20
struct ws_globals_s ws_globals;
ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
{
ssize_t r;
- int sanity = 2000;
+ int sanity = WS_WRITE_SANITY;
int ssl_err = 0;
size_t wrote = 0;
wrote += r;
}
- if (sanity < 2000) {
- ms_sleep(1);
+ if (sanity < WS_WRITE_SANITY) {
+ int ms = 1;
+
+ if (wsh->block) {
+ if (sanity < WS_WRITE_SANITY * 3 / 4) {
+ ms = 60;
+ } else if (sanity < WS_WRITE_SANITY / 2) {
+ ms = 10;
+ }
+ }
+ ms_sleep(ms);
}
if (r == -1) {
wrote += r;
}
- if (sanity < 2000) {
- ms_sleep(1);
+ if (sanity < WS_WRITE_SANITY) {
+ int ms = 1;
+
+ if (wsh->block) {
+ if (sanity < WS_WRITE_SANITY * 3 / 4) {
+ ms = 60;
+ } else if (sanity < WS_WRITE_SANITY / 2) {
+ ms = 10;
+ }
+ }
+ ms_sleep(ms);
}
} while (--sanity > 0 && ((r == -1 && xp_is_blocking(xp_errno())) || (wsh->block && wrote < bytes)));
//printf("wRITE FAIL: %s\n", strerror(errno));
//}
- return r;
+ return r < 0 ? r : wrote;
}
#ifdef _MSC_VER
wsh->sock = sock;
wsh->block = block;
- wsh->sanity = 5000;
+ wsh->sanity = WS_INIT_SANITY;
wsh->ssl_ctx = ssl_ctx;
wsh->stay_open = stay_open;