--- src/dtm/dtmnd/dtm_node_sockets.cc | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
diff --git a/src/dtm/dtmnd/dtm_node_sockets.cc b/src/dtm/dtmnd/dtm_node_sockets.cc index 41e16206b..7cb461810 100644 --- a/src/dtm/dtmnd/dtm_node_sockets.cc +++ b/src/dtm/dtmnd/dtm_node_sockets.cc @@ -241,6 +241,10 @@ int comm_socket_setup_new(DTM_INTERNODE_CB *dtms_cb, struct addrinfo addr_criteria, *p; /* Criteria for address match */ char foreign_address_eth[INET6_ADDRSTRLEN + IFNAMSIZ]; int flag; + struct in_addr addr_ipv4; + struct sockaddr_in sockaddr; + struct in6_addr addr_ipv6; + struct sockaddr_in6 sockaddr6; TRACE_ENTER(); /* Construct the serv address structure */ @@ -330,6 +334,30 @@ int comm_socket_setup_new(DTM_INTERNODE_CB *dtms_cb, goto done; } + if (dtms_cb->i_addr_family == AF_INET) { + if (inet_pton(AF_INET, dtms_cb->ip_addr.c_str(), &addr_ipv4) == 1) { + sockaddr.sin_family = AF_INET; + sockaddr.sin_port = 0; + sockaddr.sin_addr = addr_ipv4; + if (osaf_bind(sock_desc, (struct sockaddr *)&sockaddr, + sizeof(sockaddr)) != 0) + LOG_WA("DTM:osaf_bind() ipv4 failed with errno %d", errno); + } else { + LOG_WA("DTM:inet_pton(%s) ipv4 failed", dtms_cb->ip_addr.c_str()); + } + } else { + if (inet_pton(AF_INET6, dtms_cb->ip_addr.c_str(), &addr_ipv6) == 1) { + sockaddr6.sin6_family = AF_INET6; + sockaddr6.sin6_port = 0; + sockaddr6.sin6_addr = addr_ipv6; + if (osaf_bind(sock_desc, (struct sockaddr *)&sockaddr6, + sizeof(sockaddr6)) != 0) + LOG_WA("DTM:osaf_bind() ipv6 failed with errno %d", errno); + } else { + LOG_WA("DTM:inet_pton(%s) ipv6 failed", dtms_cb->ip_addr.c_str()); + } + } + /* Try to connect to the given port */ if (connect(sock_desc, addr_list->ai_addr, addr_list->ai_addrlen) < 0) { err = errno; -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel