From 438f95abaeb34a47a681825ef48775321333acc6 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 28 Nov 2012 00:10:32 +0900 Subject: [PATCH] Made socket non-blocking mode in SocketCore::acceptConnection() --- src/FtpNegotiationCommand.cc | 3 +-- src/HttpListenCommand.cc | 1 - src/PeerListenCommand.cc | 4 +--- src/SocketCore.cc | 6 ++++-- src/SocketCore.h | 4 ++-- test/FtpConnectionTest.cc | 3 ++- 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/FtpNegotiationCommand.cc b/src/FtpNegotiationCommand.cc index a4188c51..362f94e7 100644 --- a/src/FtpNegotiationCommand.cc +++ b/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; } diff --git a/src/HttpListenCommand.cc b/src/HttpListenCommand.cc index 84abe782..b3d78bd9 100644 --- a/src/HttpListenCommand.cc +++ b/src/HttpListenCommand.cc @@ -73,7 +73,6 @@ bool HttpListenCommand::execute() try { if(serverSocket_->isReadable(0)) { SharedHandle socket(serverSocket_->acceptConnection()); - socket->setNonBlockingMode(); std::pair peerInfo; socket->getPeerInfo(peerInfo); diff --git a/src/PeerListenCommand.cc b/src/PeerListenCommand.cc index ee015551..54e7d7eb 100644 --- a/src/PeerListenCommand.cc +++ b/src/PeerListenCommand.cc @@ -110,12 +110,10 @@ bool PeerListenCommand::execute() { for(int i = 0; i < 3 && socket_->isReadable(0); ++i) { SharedHandle peerSocket; try { - peerSocket.reset(socket_->acceptConnection()); + peerSocket = socket_->acceptConnection(); std::pair peerInfo; peerSocket->getPeerInfo(peerInfo); - peerSocket->setNonBlockingMode(); - SharedHandle peer(new Peer(peerInfo.first, peerInfo.second, true)); cuid_t cuid = e_->newCUID(); Command* command = diff --git a/src/SocketCore.cc b/src/SocketCore.cc index aa2e6490..1c65a733 100644 --- a/src/SocketCore.cc +++ b/src/SocketCore.cc @@ -355,7 +355,7 @@ void SocketCore::beginListen() } } -SocketCore* SocketCore::acceptConnection() const +SharedHandle 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 sock(new SocketCore(fd, sockType_)); + sock->setNonBlockingMode(); + return sock; } int SocketCore::getAddrInfo(std::pair& addrinfo) const diff --git a/src/SocketCore.h b/src/SocketCore.h index 41dd5593..5efea0ce 100644 --- a/src/SocketCore.h +++ b/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 acceptConnection() const; /** * Connects to the server named host and the destination port is port. diff --git a/test/FtpConnectionTest.cc b/test/FtpConnectionTest.cc index df85ce8f..bf7fd4f3 100644 --- a/test/FtpConnectionTest.cc +++ b/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()),