You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by cl...@apache.org on 2014/09/23 03:11:15 UTC
svn commit: r1626923 - /qpid/proton/trunk/proton-c/src/windows/io.c
Author: cliffjansen
Date: Tue Sep 23 01:11:15 2014
New Revision: 1626923
URL: http://svn.apache.org/r1626923
Log:
PROTON-684: Restrict IOCP enlistment to pn_selector_t usage scenarios in Windows
Modified:
qpid/proton/trunk/proton-c/src/windows/io.c
Modified: qpid/proton/trunk/proton-c/src/windows/io.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/windows/io.c?rev=1626923&r1=1626922&r2=1626923&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/windows/io.c (original)
+++ qpid/proton/trunk/proton-c/src/windows/io.c Tue Sep 23 01:11:15 2014
@@ -210,14 +210,16 @@ pn_socket_t pn_listen(pn_io_t *io, const
return INVALID_SOCKET;
}
- iocpdesc_t *iocpd = pni_iocpdesc_create(io->iocp, sock, false);
- if (!iocpd) {
- pn_i_error_from_errno(io->error, "register");
- closesocket(sock);
- return INVALID_SOCKET;
+ if (io->iocp->selector) {
+ iocpdesc_t *iocpd = pni_iocpdesc_create(io->iocp, sock, false);
+ if (!iocpd) {
+ pn_i_error_from_errno(io->error, "register");
+ closesocket(sock);
+ return INVALID_SOCKET;
+ }
+ pni_iocpdesc_start(iocpd);
}
- pni_iocpdesc_start(iocpd);
return sock;
}
@@ -242,7 +244,22 @@ pn_socket_t pn_connect(pn_io_t *io, cons
ensure_unique(io, sock);
pn_configure_sock(io, sock);
- return pni_iocp_begin_connect(io->iocp, sock, addr, io->error);
+
+ if (io->iocp->selector) {
+ return pni_iocp_begin_connect(io->iocp, sock, addr, io->error);
+ } else {
+ if (connect(sock, addr->ai_addr, addr->ai_addrlen) != 0) {
+ if (WSAGetLastError() != WSAEWOULDBLOCK) {
+ pni_win32_error(io->error, "connect", WSAGetLastError());
+ freeaddrinfo(addr);
+ closesocket(sock);
+ return INVALID_SOCKET;
+ }
+ }
+
+ freeaddrinfo(addr);
+ return sock;
+ }
}
pn_socket_t pn_accept(pn_io_t *io, pn_socket_t listen_sock, char *name, size_t size)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org