summaryrefslogtreecommitdiff
path: root/src/aio
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2014-06-07 03:14:00 +0200
committerMartin Sustrik <sustrik@250bpm.com>2014-06-07 03:14:00 +0200
commit63a6f01bc7dcbab14b42382e2613313ae838909d (patch)
tree7b48008403bbeceb272faaf39ff0601cace9ea10 /src/aio
parente8723e590b74c5d33a5a539119e96278398efdec (diff)
downloadnanomsg-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.inc24
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;
}