+if (!localAddress.empty())
+ {
+ if (localPort == 0)
+ localPort = port;
+
+ unsigned long ip = inet_addr(localAddress.c_str());
+
+ if (ip == INADDR_NONE)
+ {
+ struct hostent * phe = gethostbyname(localAddress.c_str());
+ if (phe == NULL)
+ {
+ errorMsg = "DNS error.\nCan not reslove " + localAddress;
+ return st_dns_err;
+ }
+
+ struct hostent he;
+ memcpy(&he, phe, sizeof(he));
+ ip = *((long *)he.h_addr_list[0]);
+ }
+
+ struct sockaddr_in localAddr;
+ memset(&localAddr, 0, sizeof(localAddr));
+ localAddr.sin_family = AF_INET;
+ localAddr.sin_port = htons(localPort);
+ localAddr.sin_addr.s_addr = ip;
+
+ if (bind(outerSocket, (struct sockaddr *)&localAddr, sizeof(localAddr)) < 0)
+ {
+ errorMsg = BIND_FAILED;
+ close(outerSocket);
+ return st_conn_fail;
+ }
+ }
+