]> sjero.net Git - iperf/blobdiff - src/Client.cpp
Native IPv6 support for iperf
[iperf] / src / Client.cpp
index 2195c4fd3027c8b34f9da14273af7ffcca75b310..b1dda9c2e99b592cd0bb834a292b1da35e392a21 100644 (file)
@@ -90,10 +90,7 @@ Client::Client( thread_Settings *inSettings ) {
         ReportSettings( inSettings );
         if ( mSettings->multihdr && isMultipleReport( inSettings ) ) {
             mSettings->multihdr->report->connection.peer = mSettings->peer;
-            mSettings->multihdr->report->connection.size_peer = mSettings->size_peer;
             mSettings->multihdr->report->connection.local = mSettings->local;
-            SockAddr_setPortAny( &mSettings->multihdr->report->connection.local );
-            mSettings->multihdr->report->connection.size_local = mSettings->size_local;
         }
     }
 
@@ -308,34 +305,12 @@ void Client::InitiateServer()
  * ------------------------------------------------------------------- */
 void Client::Connect()
 {
-    int rc;
-
-    assert( mSettings->inHostname != NULL );
-
-    // The local socket needs to be filled in first, since the
-    // IPv6 address testing for the peer depends on the type of
-    // the local socket
-    SockAddr_localAddr( mSettings );
-    SockAddr_remoteAddr( mSettings );
-    MakeSocket( mSettings);
-    SetSocketOptions( mSettings );
-
-    if ( mSettings->mLocalhost != NULL ) {
-        // bind socket to local address
-        rc = bind( mSettings->mSock, (sockaddr*) &mSettings->local, 
-                   SockAddr_get_sizeof_sockaddr( &mSettings->local ) );
-        WARN_errno( rc == SOCKET_ERROR, "bind" );
-    }
+    socklen_t size_local = sizeof(mSettings->local);
 
-    // connect socket
-    rc = connect( mSettings->mSock, (sockaddr*) &mSettings->peer, 
-                  SockAddr_get_sizeof_sockaddr( &mSettings->peer ));
-    WARN_errno( rc == SOCKET_ERROR, "connect" );
+    MakeSocket(mSettings);
 
-    getsockname( mSettings->mSock, (sockaddr*) &mSettings->local, 
-                 &mSettings->size_local );
-    getpeername( mSettings->mSock, (sockaddr*) &mSettings->peer,
-                 &mSettings->size_peer );
+    /* determine local interface after establishing the connection */
+    getsockname(mSettings->mSock, (struct sockaddr *)&mSettings->local, &size_local);
 
     /* The DCCP packet size must not exceed the MPS (RFC 4340, 14.) */
     if (mSettings->mProtocol == kProto_DCCP) {