Repository: qpid-proton Updated Branches: refs/heads/master b7175ee04 -> 26553f012
PROTON-1144: Fixed some socket level issues: - Fixed very strange unecessary lookup of protocol "tcp" - Fixed accepting IPv6 addresses (would have been truncated before) Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/a22e6c77 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/a22e6c77 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/a22e6c77 Branch: refs/heads/master Commit: a22e6c77d8f7a14abe97f344e25282ebced128cd Parents: b7175ee Author: Andrew Stitcher <[email protected]> Authored: Fri Feb 19 13:45:48 2016 -0500 Committer: Andrew Stitcher <[email protected]> Committed: Tue Feb 23 00:35:52 2016 -0500 ---------------------------------------------------------------------- proton-c/bindings/cpp/src/posix/io.cpp | 3 +-- proton-c/bindings/cpp/src/windows/io.cpp | 3 +-- proton-c/src/posix/io.c | 27 ++++++++------------------- proton-c/src/windows/io.c | 17 ++++++----------- 4 files changed, 16 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a22e6c77/proton-c/bindings/cpp/src/posix/io.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/posix/io.cpp b/proton-c/bindings/cpp/src/posix/io.cpp index 0f7a3f9..6da2887 100644 --- a/proton-c/bindings/cpp/src/posix/io.cpp +++ b/proton-c/bindings/cpp/src/posix/io.cpp @@ -155,8 +155,7 @@ listener::listener(const std::string& host, const std::string &port) : socket_(I listener::~listener() { ::close(socket_); } descriptor listener::accept(std::string& host_str, std::string& port_str) { - struct sockaddr_in addr; - ::memset(&addr, 0, sizeof(addr)); + struct sockaddr_storage addr; socklen_t size = sizeof(addr); int fd = check(::accept(socket_, (struct sockaddr *)&addr, &size), "accept: "); char host[NI_MAXHOST], port[NI_MAXSERV]; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a22e6c77/proton-c/bindings/cpp/src/windows/io.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/windows/io.cpp b/proton-c/bindings/cpp/src/windows/io.cpp index 9273f19..1bdccef 100644 --- a/proton-c/bindings/cpp/src/windows/io.cpp +++ b/proton-c/bindings/cpp/src/windows/io.cpp @@ -182,8 +182,7 @@ listener::listener(const std::string& host, const std::string &port) : socket_(I listener::~listener() { ::closesocket(socket_); } descriptor listener::accept(std::string& host_str, std::string& port_str) { - struct sockaddr_in addr; - ::memset(&addr, 0, sizeof(addr)); + struct sockaddr_storage addr; socklen_t size = sizeof(addr); int fd = check(::accept(socket_, (struct sockaddr *)&addr, &size), "accept: "); char host[NI_MAXHOST], port[NI_MAXSERV]; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a22e6c77/proton-c/src/posix/io.c ---------------------------------------------------------------------- diff --git a/proton-c/src/posix/io.c b/proton-c/src/posix/io.c index fe0bf73..510cdf6 100644 --- a/proton-c/src/posix/io.c +++ b/proton-c/src/posix/io.c @@ -28,7 +28,6 @@ #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> -#include <netinet/in.h> #include <netinet/tcp.h> #include <netdb.h> #include <unistd.h> @@ -122,7 +121,7 @@ static void pn_configure_sock(pn_io_t *io, pn_socket_t sock) { } } -static inline int pn_create_socket(int af); +static inline int pn_create_socket(int af, int protocol); pn_socket_t pn_listen(pn_io_t *io, const char *host, const char *port) { @@ -133,7 +132,7 @@ pn_socket_t pn_listen(pn_io_t *io, const char *host, const char *port) return PN_INVALID_SOCKET; } - pn_socket_t sock = pn_create_socket(addr->ai_family); + pn_socket_t sock = pn_create_socket(addr->ai_family, addr->ai_protocol); if (sock == PN_INVALID_SOCKET) { freeaddrinfo(addr); pn_i_error_from_errno(io->error, "pn_create_socket"); @@ -175,7 +174,7 @@ pn_socket_t pn_connect(pn_io_t *io, const char *host, const char *port) return PN_INVALID_SOCKET; } - pn_socket_t sock = pn_create_socket(addr->ai_family); + pn_socket_t sock = pn_create_socket(addr->ai_family, addr->ai_protocol); if (sock == PN_INVALID_SOCKET) { pn_i_error_from_errno(io->error, "pn_create_socket"); freeaddrinfo(addr); @@ -200,8 +199,7 @@ pn_socket_t pn_connect(pn_io_t *io, const char *host, const char *port) pn_socket_t pn_accept(pn_io_t *io, pn_socket_t socket, char *name, size_t size) { - struct sockaddr_in addr = {0}; - addr.sin_family = AF_UNSPEC; + struct sockaddr_storage addr; socklen_t addrlen = sizeof(addr); pn_socket_t sock = accept(socket, (struct sockaddr *) &addr, &addrlen); if (sock == PN_INVALID_SOCKET) { @@ -231,12 +229,8 @@ ssize_t pn_send(pn_io_t *io, pn_socket_t socket, const void *buf, size_t len) { return count; } -static inline int pn_create_socket(int af) { - struct protoent * pe_tcp = getprotobyname("tcp"); - if (pe_tcp == NULL) { - return -1; - } - return socket(af, SOCK_STREAM, pe_tcp->p_proto); +static inline int pn_create_socket(int af, int protocol) { + return socket(af, SOCK_STREAM, protocol); } #elif defined(SO_NOSIGPIPE) ssize_t pn_send(pn_io_t *io, pn_socket_t socket, const void *buf, size_t size) { @@ -246,14 +240,9 @@ ssize_t pn_send(pn_io_t *io, pn_socket_t socket, const void *buf, size_t size) { return count; } -static inline int pn_create_socket(int af) { - struct protoent * pe_tcp; +static inline int pn_create_socket(int af, int protocol) { int sock; - pe_tcp = getprotobyname("tcp"); - if (pe_tcp == NULL) { - return -1; - } - sock = socket(af, SOCK_STREAM, pe_tcp->p_proto); + sock = socket(af, SOCK_STREAM, protocol); if (sock == -1) return sock; int optval = 1; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a22e6c77/proton-c/src/windows/io.c ---------------------------------------------------------------------- diff --git a/proton-c/src/windows/io.c b/proton-c/src/windows/io.c index 261a56f..7ff928d 100644 --- a/proton-c/src/windows/io.c +++ b/proton-c/src/windows/io.c @@ -169,7 +169,7 @@ static void pn_configure_sock(pn_io_t *io, pn_socket_t sock) { } } -static inline pn_socket_t pni_create_socket(int domain); +static inline pn_socket_t pni_create_socket(int domain, int protocol); static const char *amqp_service(const char *port) { // Help older Windows to know about amqp[s] ports @@ -189,7 +189,7 @@ pn_socket_t pn_listen(pn_io_t *io, const char *host, const char *port) return INVALID_SOCKET; } - pn_socket_t sock = pni_create_socket(addr->ai_family); + pn_socket_t sock = pni_create_socket(addr->ai_family, addr->ai_protocol); if (sock == INVALID_SOCKET) { pni_win32_error(io->error, "pni_create_socket", WSAGetLastError()); return INVALID_SOCKET; @@ -243,7 +243,7 @@ pn_socket_t pn_connect(pn_io_t *io, const char *hostarg, const char *port) return INVALID_SOCKET; } - pn_socket_t sock = pni_create_socket(addr->ai_family); + pn_socket_t sock = pni_create_socket(addr->ai_family, addr->ai_protocol); if (sock == INVALID_SOCKET) { pni_win32_error(io->error, "proton pni_create_socket", WSAGetLastError()); freeaddrinfo(addr); @@ -272,8 +272,7 @@ pn_socket_t pn_connect(pn_io_t *io, const char *hostarg, const char *port) pn_socket_t pn_accept(pn_io_t *io, pn_socket_t listen_sock, char *name, size_t size) { - struct sockaddr_in addr = {0}; - addr.sin_family = AF_INET; + struct sockaddr_storage addr; socklen_t addrlen = sizeof(addr); iocpdesc_t *listend = pni_iocpdesc_map_get(io->iocp, listen_sock); pn_socket_t accept_sock; @@ -309,12 +308,8 @@ pn_socket_t pn_accept(pn_io_t *io, pn_socket_t listen_sock, char *name, size_t s } } -static inline pn_socket_t pni_create_socket(int domain) { - struct protoent * pe_tcp = getprotobyname("tcp"); - if (pe_tcp == NULL) { - return -1; - } - return socket(domain, SOCK_STREAM, pe_tcp->p_proto); +static inline pn_socket_t pni_create_socket(int domain, int protocol) { + return socket(domain, SOCK_STREAM, protocol); } ssize_t pn_send(pn_io_t *io, pn_socket_t sockfd, const void *buf, size_t len) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
