On Fri, 19 Feb 2010 12:21:03 +0100 Gerd Hoffmann <[email protected]> wrote:
> > Signed-off-by: Gerd Hoffmann <[email protected]> > --- > client/red_peer.cpp | 89 +++++++++++++++++++++++--------------------------- > 1 files changed, 41 insertions(+), 48 deletions(-) > > diff --git a/client/red_peer.cpp b/client/red_peer.cpp > index f252ef2..a6afcc2 100644 > --- a/client/red_peer.cpp > +++ b/client/red_peer.cpp > @@ -69,60 +69,53 @@ void RedPeer::cleanup() > } > } > > -uint32_t RedPeer::host_by_name(const char* host) > +void RedPeer::connect_unsecure(const char* host, int portnr) > { > - struct addrinfo *result = NULL; > - struct sockaddr_in *addr; > - uint32_t return_value; > - int rc; > - > - rc = getaddrinfo(host, NULL, NULL, &result); > - while (result != NULL && result->ai_family != PF_INET) > - result = result->ai_next; > - if (rc != 0 || result == NULL) { > - THROW_ERR(SPICEC_ERROR_CODE_GETHOSTBYNAME_FAILED, "cannot resolve > host address %s", host); > - } > - > - addr = (sockaddr_in *)result->ai_addr; > - return_value = addr->sin_addr.s_addr; > - > - freeaddrinfo(result); > - > - DBG(0, "%s = %u", host, return_value); > - return ntohl(return_value); > -} > - > -void RedPeer::connect_unsecure(const char* host, int port) > -{ > - struct sockaddr_in addr; > - int no_delay; > - uint32_t ip; > + struct addrinfo ai, *result = NULL, *e; > + char uaddr[INET6_ADDRSTRLEN+1]; > + char uport[33], port[33]; > + int err = 0, rc, no_delay = 1; > ASSERT(_ctx == NULL && _ssl == NULL && _peer == INVALID_SOCKET); > try { > - ip = host_by_name(host); > - > - addr.sin_port = htons(port); > - addr.sin_family = AF_INET; > - addr.sin_addr.s_addr = htonl(ip); > - > - Lock lock(_lock); > - if ((_peer = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == > INVALID_SOCKET) { > - int err = sock_error(); > - THROW_ERR(SPICEC_ERROR_CODE_SOCKET_FAILED, "failed to create > socket: %s (%d)", > - sock_err_message(err), err); > + memset(&ai,0, sizeof(ai)); > + ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; > + ai.ai_family = PF_UNSPEC; > + ai.ai_socktype = SOCK_STREAM; > + snprintf(port, sizeof(port), "%d", portnr); > + rc = getaddrinfo(host, port, &ai, &result); > + if (rc != 0) { > + THROW_ERR(SPICEC_ERROR_CODE_GETHOSTBYNAME_FAILED, "cannot > resolve host address %s", host); > } > + Lock lock(_lock); > + _peer = -1; > + for (e = result; e != NULL; e = e->ai_next) { > + if ((_peer = socket(e->ai_family, e->ai_socktype, > e->ai_protocol)) == INVALID_SOCKET) { > + int err = sock_error(); > + THROW_ERR(SPICEC_ERROR_CODE_SOCKET_FAILED, "failed to create > socket: %s (%d)", > + sock_err_message(err), err); Hi, patch look good. just 2 comments: first: you probably want to remove static uint32_t host_by_name(const char *host); from red_peer.h 2: It isnt your fault beacuse it was in the code before (in host_by_name()) but I just wondering isnt this throw should be handled at the catch () { } of the try, with freeaddrinfo of result? Thanks. _______________________________________________ Spice-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/spice-devel
