From 844ce972fed056e1c4e0517e43b814c62d68edce Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Mon, 5 Feb 2018 10:23:35 -0800 Subject: fixes #228 aio iov should have larger limits (dynamically allocated) --- src/platform/windows/win_tcp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/platform/windows/win_tcp.c') 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 #include 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)) { -- cgit v1.2.3-70-g09d2