}
// reuse the address, so we can run if a former server was killed off
- if (inSettings->mThreadMode == kMode_Listener) {
+ if (inSettings->mThreadMode == kMode_Listener || inSettings->mBindPort > 0) {
val = 1;
rc = setsockopt(inSettings->mSock, SOL_SOCKET, SO_REUSEADDR, &val, len);
WARN_errno( rc == SOCKET_ERROR, "setsockopt SO_REUSEADDR" );
struct addrinfo *local = NULL, *src,
*remote = NULL, *dst, hints;
char port[6];
+ char lport[6];
int rc, socktype = sockType(inSettings->mProtocol);
assert(inSettings->mLocalhost || inSettings->mHost);
memset(&inSettings->local, 0, sizeof(inSettings->local));
memset(&inSettings->peer, 0, sizeof(inSettings->peer));
sprintf(port, "%u", inSettings->mPort);
+ if(inSettings->mBindPort > 0){
+ sprintf(lport, "%u", inSettings->mBindPort);
+ }else{
+ sprintf(lport, "%u", inSettings->mPort);
+ }
/*
* Set up address hint structure
/*
* Obtain local/remote address information
*/
- if (inSettings->mLocalhost || inSettings->mThreadMode == kMode_Listener) {
- if (inSettings->mLocalhost == NULL)
+ if (inSettings->mLocalhost || inSettings->mBindPort > 0 || inSettings->mThreadMode == kMode_Listener) {
+ if (inSettings->mThreadMode == kMode_Listener)
hints.ai_flags |= AI_PASSIVE;
- if ((rc = getaddrinfo(inSettings->mLocalhost, port, &hints, &local)))
+ if ((rc = getaddrinfo(inSettings->mLocalhost, lport, &hints, &local)))
die("Can not resolve local address %s#%s: %s",
- inSettings->mLocalhost ? : "(local)", port, gai_strerror(rc));
+ inSettings->mLocalhost ? : "(local)", lport, gai_strerror(rc));
}
if (inSettings->mHost && inSettings->mThreadMode != kMode_Listener) {