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]

Reply via email to