]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: we should set the socket options before connect or listen in order to have it... 5723/head
authorRuifeng Yang <yangruifeng.09209@h3c.com>
Mon, 7 Sep 2015 01:05:38 +0000 (09:05 +0800)
committerRuifeng Yang <yangruifeng.09209@h3c.com>
Mon, 7 Sep 2015 01:05:49 +0000 (09:05 +0800)
Signed-off-by: Ruifeng Yang <149233652@qq.com>
src/msg/async/AsyncConnection.cc
src/msg/async/AsyncMessenger.cc
src/msg/async/net_handler.cc
src/msg/simple/Accepter.cc
src/msg/simple/Pipe.cc

index 36a19f80cccce4a2be343e8a57a8a17dc8f1a04d..37258b337a8ca18e2a16e6bf403a90a8809746e9 100644 (file)
@@ -975,7 +975,6 @@ int AsyncConnection::_process_connection()
         if (r < 0) {
           goto fail;
         }
-        net.set_socket_options(sd);
 
         center->create_file_event(sd, EVENT_READABLE, read_handler);
         state = STATE_CONNECTING_WAIT_BANNER;
index c4be6a7746bf34f1cdd00a1606839d6dc502f43f..e5e393a4fb4722e5301596f7e2e4caa5e5a45f39 100644 (file)
@@ -97,6 +97,9 @@ int Processor::bind(const entity_addr_t &bind_addr, const set<int>& avoid_ports)
     listen_sd = -1;
     return -errno;
   }
+
+  net.set_socket_options(listen_sd);
+
   // use whatever user specified (if anything)
   entity_addr_t listen_addr = bind_addr;
   listen_addr.set_family(family);
index 8e6468cfde362cf115ecfa8af363696ab461ce1d..2639fdc3b2b9f61f9093c8a849c189110c06d9ff 100644 (file)
@@ -116,6 +116,9 @@ int NetHandler::generic_connect(const entity_addr_t& addr, bool nonblock)
       return ret;
     }
   }
+
+  set_socket_options(s);
+
   ret = ::connect(s, (sockaddr*)&addr.addr, addr.addr_size());
   if (ret < 0) {
     if (errno == EINPROGRESS && nonblock)
@@ -126,8 +129,6 @@ int NetHandler::generic_connect(const entity_addr_t& addr, bool nonblock)
     return -errno;
   }
 
-  set_socket_options(s);
-
   return s;
 }
 
index 7d989a93691e177abea186f7d8511653711341ac..3333693b706dc261fd8200c1bd43c66fda2a47f0 100644 (file)
@@ -140,6 +140,16 @@ int Accepter::bind(const entity_addr_t &bind_addr, const set<int>& avoid_ports)
     return rc;
   }
   
+  if (msgr->cct->_conf->ms_tcp_rcvbuf) {
+    int size = msgr->cct->_conf->ms_tcp_rcvbuf;
+    rc = ::setsockopt(listen_sd, SOL_SOCKET, SO_RCVBUF, (void*)&size, sizeof(size));
+    if (rc < 0)  {
+      rc = -errno;
+      lderr(msgr->cct) << "accepter.bind failed to set SO_RCVBUF to " << size << ": " << cpp_strerror(r) << dendl;
+      return rc;
+    }
+  }
+
   ldout(msgr->cct,10) << "accepter.bind bound to " << listen_addr << dendl;
 
   // listen!
index a9b3b54e870e174bfba0618868c6c8c9a9088737..7d6419c3ee27db8b7ebbc3424ffe58ea10548ae8 100644 (file)
@@ -913,6 +913,9 @@ int Pipe::connect()
   }
 
   recv_reset();
+
+  set_socket_options();
+
   // connect!
   ldout(msgr->cct,10) << "connecting to " << peer_addr << dendl;
   rc = ::connect(sd, (sockaddr*)&peer_addr.addr, peer_addr.addr_size());
@@ -922,8 +925,6 @@ int Pipe::connect()
     goto fail;
   }
 
-  set_socket_options();
-
   // verify banner
   // FIXME: this should be non-blocking, or in some other way verify the banner as we get it.
   if (tcp_read((char*)&banner, strlen(CEPH_BANNER)) < 0) {