diff options
author | Martin Sustrik <sustrik@250bpm.com> | 2014-06-07 03:14:00 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2014-06-07 03:14:00 +0200 |
commit | 63a6f01bc7dcbab14b42382e2613313ae838909d (patch) | |
tree | 7b48008403bbeceb272faaf39ff0601cace9ea10 /src/aio | |
parent | e8723e590b74c5d33a5a539119e96278398efdec (diff) | |
download | nanomsg-63a6f01bc7dcbab14b42382e2613313ae838909d.tar.gz |
nn_usock_recv of NamedPipes merged
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src/aio')
-rw-r--r-- | src/aio/usock_win.inc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/aio/usock_win.inc b/src/aio/usock_win.inc index e278b27..85e81bf 100644 --- a/src/aio/usock_win.inc +++ b/src/aio/usock_win.inc @@ -430,8 +430,10 @@ void nn_usock_send (struct nn_usock *self, const struct nn_iovec *iov, void nn_usock_recv (struct nn_usock *self, void *buf, size_t len) { int rc; + BOOL brc; WSABUF wbuf; DWORD wflags; + DWORD error; /* Make sure that the socket is actually alive. */ nn_assert_state (self, NN_USOCK_STATE_ACTIVE); @@ -441,20 +443,28 @@ void nn_usock_recv (struct nn_usock *self, void *buf, size_t len) wbuf.buf = (char FAR*) buf; wflags = MSG_WAITALL; memset (&self->in.olpd, 0, sizeof (self->in.olpd)); - rc = WSARecv (self->s, &wbuf, 1, NULL, &wflags, &self->in.olpd, NULL); - if (nn_fast (rc == 0)) { + if (self->domain == AF_UNIX) { + brc = ReadFile(self->p, buf, len, NULL, &self->in.olpd); + error = brc ? ERROR_SUCCESS : GetLastError(); + } + else { + rc = WSARecv (self->s, &wbuf, 1, NULL, &wflags, &self->in.olpd, NULL); + error = (rc == 0) ? ERROR_SUCCESS : WSAGetLastError (); + } + + if (nn_fast (error == ERROR_SUCCESS)) { nn_worker_op_start (&self->in, 1); return; } - rc = WSAGetLastError (); - if (nn_fast (rc == WSA_IO_PENDING)) { + + if (nn_fast (error == WSA_IO_PENDING)) { nn_worker_op_start (&self->in, 1); return; } - if (rc == WSAECONNABORTED || rc == WSAECONNRESET || - rc == WSAENETDOWN || rc == WSAENETRESET || - rc == WSAETIMEDOUT || rc == WSAEWOULDBLOCK) { + if (error == WSAECONNABORTED || error == WSAECONNRESET || + error == WSAENETDOWN || error == WSAENETRESET || + error == WSAETIMEDOUT || error == WSAEWOULDBLOCK) { nn_fsm_action (&self->fsm, NN_USOCK_ACTION_ERROR); return; } |