aboutsummaryrefslogtreecommitdiff
path: root/src/platform/windows/win_tcp.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-02-05 10:23:35 -0800
committerGarrett D'Amore <garrett@damore.org>2018-02-05 10:23:35 -0800
commit844ce972fed056e1c4e0517e43b814c62d68edce (patch)
treeadfa91e3f7188d268f3d081e80c14f7e8a609a87 /src/platform/windows/win_tcp.c
parentb893f8ff1f96dde567fa6a75f4b15bf69e53d6f5 (diff)
downloadnng-844ce972fed056e1c4e0517e43b814c62d68edce.tar.gz
nng-844ce972fed056e1c4e0517e43b814c62d68edce.tar.bz2
nng-844ce972fed056e1c4e0517e43b814c62d68edce.zip
fixes #228 aio iov should have larger limits (dynamically allocated)
Diffstat (limited to 'src/platform/windows/win_tcp.c')
-rw-r--r--src/platform/windows/win_tcp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/platform/windows/win_tcp.c b/src/platform/windows/win_tcp.c
index c9935719..254cf40b 100644
--- a/src/platform/windows/win_tcp.c
+++ b/src/platform/windows/win_tcp.c
@@ -12,6 +12,7 @@
#ifdef NNG_PLATFORM_WINDOWS
+#include <malloc.h>
#include <stdio.h>
struct nni_plat_tcp_pipe {
@@ -101,15 +102,16 @@ nni_win_tcp_pipe_start(nni_win_event *evt, nni_aio *aio)
{
int rv;
SOCKET s;
- WSABUF iov[4]; // XXX: consider _alloca()
DWORD niov;
DWORD flags;
nni_plat_tcp_pipe *pipe = evt->ptr;
int i;
- int naiov;
+ unsigned naiov;
nni_iov * aiov;
+ WSABUF * iov;
nni_aio_get_iov(aio, &naiov, &aiov);
+ iov = _malloca(naiov * sizeof(*iov));
// Put the AIOs in Windows form.
for (niov = 0, i = 0; i < naiov; i++) {
@@ -121,6 +123,7 @@ nni_win_tcp_pipe_start(nni_win_event *evt, nni_aio *aio)
}
if ((s = pipe->s) == INVALID_SOCKET) {
+ _freea(iov);
evt->status = NNG_ECLOSED;
evt->count = 0;
return (1);
@@ -136,6 +139,7 @@ nni_win_tcp_pipe_start(nni_win_event *evt, nni_aio *aio)
} else {
rv = WSARecv(s, iov, niov, NULL, &flags, &evt->olpd, NULL);
}
+ _freea(iov);
if ((rv == SOCKET_ERROR) &&
((rv = GetLastError()) != ERROR_IO_PENDING)) {