浏览代码

Made socket non-blocking mode in SocketCore::acceptConnection()

Tatsuhiro Tsujikawa 13 年之前
父节点
当前提交
438f95abae
共有 6 个文件被更改,包括 10 次插入11 次删除
  1. 1 2
      src/FtpNegotiationCommand.cc
  2. 0 1
      src/HttpListenCommand.cc
  3. 1 3
      src/PeerListenCommand.cc
  4. 4 2
      src/SocketCore.cc
  5. 2 2
      src/SocketCore.h
  6. 2 1
      test/FtpConnectionTest.cc

+ 1 - 2
src/FtpNegotiationCommand.cc

@@ -866,8 +866,7 @@ bool FtpNegotiationCommand::waitConnection()
 {
   disableReadCheckSocket();
   setReadCheckSocket(getSocket());
-  dataSocket_.reset(serverSocket_->acceptConnection());
-  dataSocket_->setNonBlockingMode();
+  dataSocket_ = serverSocket_->acceptConnection();
   sequence_ = SEQ_NEGOTIATION_COMPLETED;
   return false;
 }

+ 0 - 1
src/HttpListenCommand.cc

@@ -73,7 +73,6 @@ bool HttpListenCommand::execute()
   try {
     if(serverSocket_->isReadable(0)) {
       SharedHandle<SocketCore> socket(serverSocket_->acceptConnection());
-      socket->setNonBlockingMode();
 
       std::pair<std::string, uint16_t> peerInfo;
       socket->getPeerInfo(peerInfo);

+ 1 - 3
src/PeerListenCommand.cc

@@ -110,12 +110,10 @@ bool PeerListenCommand::execute() {
   for(int i = 0; i < 3 && socket_->isReadable(0); ++i) {
     SharedHandle<SocketCore> peerSocket;
     try {
-      peerSocket.reset(socket_->acceptConnection());
+      peerSocket = socket_->acceptConnection();
       std::pair<std::string, uint16_t> peerInfo;
       peerSocket->getPeerInfo(peerInfo);
 
-      peerSocket->setNonBlockingMode();
-
       SharedHandle<Peer> peer(new Peer(peerInfo.first, peerInfo.second, true));
       cuid_t cuid = e_->newCUID();
       Command* command =

+ 4 - 2
src/SocketCore.cc

@@ -355,7 +355,7 @@ void SocketCore::beginListen()
   }
 }
 
-SocketCore* SocketCore::acceptConnection() const
+SharedHandle<SocketCore> SocketCore::acceptConnection() const
 {
   sockaddr_union sockaddr;
   socklen_t len = sizeof(sockaddr);
@@ -366,7 +366,9 @@ SocketCore* SocketCore::acceptConnection() const
   if(fd == (sock_t) -1) {
     throw DL_ABORT_EX(fmt(EX_SOCKET_ACCEPT, errorMsg(errNum).c_str()));
   }
-  return new SocketCore(fd, sockType_);
+  SharedHandle<SocketCore> sock(new SocketCore(fd, sockType_));
+  sock->setNonBlockingMode();
+  return sock;
 }
 
 int SocketCore::getAddrInfo(std::pair<std::string, uint16_t>& addrinfo) const

+ 2 - 2
src/SocketCore.h

@@ -195,9 +195,9 @@ public:
   /**
    * Accepts incoming connection on this socket.
    * You must call beginListen() before calling this method.
-   * @return accepted socket. The caller must delete it after using it.
+   * @return accepted socket.
    */
-  SocketCore* acceptConnection() const;
+  SharedHandle<SocketCore> acceptConnection() const;
 
   /**
    * Connects to the server named host and the destination port is port.

+ 2 - 1
test/FtpConnectionTest.cc

@@ -64,7 +64,8 @@ public:
 
     while(!clientSocket_->isWritable(0));
 
-    serverSocket_.reset(listenSocket->acceptConnection());
+    serverSocket_ = listenSocket->acceptConnection();
+    serverSocket_->setBlockingMode();
     ftp_.reset(new FtpConnection(1, clientSocket_, req_,
                                  authConfigFactory_->createAuthConfig
                                  (req_, option_.get()),