-N, --nodelay set TCP no delay, disabling Nagle's Algorithm\n\
-V, --IPv6Version Set the domain to IPv6\n\
-Z, --ccid # Set DCCP congestion control algorithm\n\
+ -O, --bindport <port> bind to <port>\
\n\
Server specific:\n\
-s, --server run in server mode\n\
}
// 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) {
{"ipv6_domian", no_argument, NULL, 'V'},
{"suggest_win_size", no_argument, NULL, 'W'},
{"ccid", required_argument, NULL, 'Z'},
+{"bindport", required_argument, NULL, 'O'},
{0, 0, 0, 0}
};
{"IPERF_IPV6_DOMAIN", no_argument, NULL, 'V'},
{"IPERF_SUGGEST_WIN_SIZE", required_argument, NULL, 'W'},
{"IPERF_CCID", required_argument, NULL, 'Z'},
+{"IPERF_BINDPORT", required_argument, NULL, 'O'},
{0, 0, 0, 0}
};
#define SHORT_OPTIONS()
const char short_options[] =
- "12b::c:df:hi:j:l:mn:o:p:rst:uvw:x:y:A:B:CDF:IJ:L:M:NP:RS:T:UV:WZ:";
+ "12b::c:df:hi:j:l:mn:o:p:rst:uvw:x:y:A:B:CDF:IJ:L:M:NP:RS:T:UV:WZ:0:";
/* -------------------------------------------------------------------
* defaults
}
break;
+ case 'O': //Bind Port
+ mExtSettings->mBindPort=atoi(optarg);
+ if(mExtSettings->mBindPort <0 || mExtSettings->mBindPort > 65535){
+ fprintf( stderr, "Bind Port %s is invalid\n", optarg);
+ }
+ break;
+
default: // ignore unknown
break;
}