diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-02-03 19:09:06 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-02-03 19:09:06 +0900 |
| commit | 98e7018599c010b56ade294942e2e7b3d58d1bb6 (patch) | |
| tree | 21278fcd6703169e43d62d25f86d3d5cd8958de7 /src | |
| parent | 1c9cfccac4bdd16b8c6662eab9e58d6f517424d0 (diff) | |
Fix failure to set TCP_NODELAY on Windows
On Windows setting TCP_NODELAY after non-blocking connect fails
at least on Windows 7.
Diffstat (limited to 'src')
| -rw-r--r-- | src/FtpInitiateConnectionCommand.cc | 2 | ||||
| -rw-r--r-- | src/FtpNegotiationCommand.cc | 6 | ||||
| -rw-r--r-- | src/HttpInitiateConnectionCommand.cc | 2 | ||||
| -rw-r--r-- | src/PeerInitiateConnectionCommand.cc | 2 | ||||
| -rw-r--r-- | src/SocketCore.cc | 6 | ||||
| -rw-r--r-- | src/SocketCore.h | 4 |
6 files changed, 10 insertions, 12 deletions
diff --git a/src/FtpInitiateConnectionCommand.cc b/src/FtpInitiateConnectionCommand.cc index 5558e712..374bfccb 100644 --- a/src/FtpInitiateConnectionCommand.cc +++ b/src/FtpInitiateConnectionCommand.cc @@ -95,7 +95,6 @@ Command* FtpInitiateConnectionCommand::createNextCommand getCuid(), addr.c_str(), port)); createSocket(); getSocket()->establishConnection(addr, port); - getSocket()->setTcpNodelay(true); getRequest()->setConnectedAddrInfo(hostname, addr, port); if(proxyMethod == V_GET) { @@ -164,7 +163,6 @@ Command* FtpInitiateConnectionCommand::createNextCommand getCuid(), addr.c_str(), port)); createSocket(); getSocket()->establishConnection(addr, port); - getSocket()->setTcpNodelay(true); FtpNegotiationCommand* c = new FtpNegotiationCommand(getCuid(), getRequest(), getFileEntry(), getRequestGroup(), getDownloadEngine(), diff --git a/src/FtpNegotiationCommand.cc b/src/FtpNegotiationCommand.cc index a5c804b9..03827b54 100644 --- a/src/FtpNegotiationCommand.cc +++ b/src/FtpNegotiationCommand.cc @@ -682,8 +682,7 @@ bool FtpNegotiationCommand::preparePasvConnect() { dataAddr.first.c_str(), pasvPort_)); dataSocket_.reset(new SocketCore()); - dataSocket_->establishConnection(dataAddr.first, pasvPort_); - dataSocket_->setTcpNodelay(true); + dataSocket_->establishConnection(dataAddr.first, pasvPort_, false); disableReadCheckSocket(); setWriteCheckSocket(dataSocket_); sequence_ = SEQ_SEND_REST_PASV; @@ -705,7 +704,6 @@ bool FtpNegotiationCommand::resolveProxy() proxyAddr_.c_str(), proxyReq->getPort())); dataSocket_.reset(new SocketCore()); dataSocket_->establishConnection(proxyAddr_, proxyReq->getPort()); - dataSocket_->setTcpNodelay(true); disableReadCheckSocket(); setWriteCheckSocket(dataSocket_); SharedHandle<SocketRecvBuffer> socketRecvBuffer @@ -741,7 +739,6 @@ bool FtpNegotiationCommand::sendTunnelRequest() getCuid(), proxyAddr_.c_str(), proxyReq->getPort())); dataSocket_->establishConnection(proxyAddr_, proxyReq->getPort()); - dataSocket_->setTcpNodelay(true); return false; } } @@ -870,7 +867,6 @@ bool FtpNegotiationCommand::waitConnection() disableReadCheckSocket(); setReadCheckSocket(getSocket()); dataSocket_ = serverSocket_->acceptConnection(); - dataSocket_->setTcpNodelay(true); sequence_ = SEQ_NEGOTIATION_COMPLETED; return false; } diff --git a/src/HttpInitiateConnectionCommand.cc b/src/HttpInitiateConnectionCommand.cc index 3012467f..794b1886 100644 --- a/src/HttpInitiateConnectionCommand.cc +++ b/src/HttpInitiateConnectionCommand.cc @@ -82,7 +82,6 @@ Command* HttpInitiateConnectionCommand::createNextCommand getCuid(), addr.c_str(), port)); createSocket(); getSocket()->establishConnection(addr, port); - getSocket()->setTcpNodelay(true); getRequest()->setConnectedAddrInfo(hostname, addr, port); if(proxyMethod == V_TUNNEL) { @@ -140,7 +139,6 @@ Command* HttpInitiateConnectionCommand::createNextCommand getCuid(), addr.c_str(), port)); createSocket(); getSocket()->establishConnection(addr, port); - getSocket()->setTcpNodelay(true); getRequest()->setConnectedAddrInfo(hostname, addr, port); } else { diff --git a/src/PeerInitiateConnectionCommand.cc b/src/PeerInitiateConnectionCommand.cc index cc878c27..5803805b 100644 --- a/src/PeerInitiateConnectionCommand.cc +++ b/src/PeerInitiateConnectionCommand.cc @@ -82,7 +82,7 @@ bool PeerInitiateConnectionCommand::executeInternal() { getPeer()->getPort())); createSocket(); getSocket()->establishConnection(getPeer()->getIPAddress(), - getPeer()->getPort()); + getPeer()->getPort(), false); if(mseHandshakeEnabled_) { InitiatorMSEHandshakeCommand* c = new InitiatorMSEHandshakeCommand(getCuid(), requestGroup_, getPeer(), diff --git a/src/SocketCore.cc b/src/SocketCore.cc index 55c97d08..619002be 100644 --- a/src/SocketCore.cc +++ b/src/SocketCore.cc @@ -409,7 +409,8 @@ int SocketCore::getPeerInfo(std::pair<std::string, uint16_t>& peerinfo) const return sockaddr.storage.ss_family; } -void SocketCore::establishConnection(const std::string& host, uint16_t port) +void SocketCore::establishConnection(const std::string& host, uint16_t port, + bool tcpNodelay) { closeConnection(); std::string error; @@ -461,6 +462,9 @@ void SocketCore::establishConnection(const std::string& host, uint16_t port) sockfd_ = fd; // make socket non-blocking mode setNonBlockingMode(); + if(tcpNodelay) { + setTcpNodelay(true); + } if(connect(fd, rp->ai_addr, rp->ai_addrlen) == -1 && SOCKET_ERRNO != A2_EINPROGRESS) { errNum = SOCKET_ERRNO; diff --git a/src/SocketCore.h b/src/SocketCore.h index 4b04c3fb..f673657e 100644 --- a/src/SocketCore.h +++ b/src/SocketCore.h @@ -207,8 +207,10 @@ public: * the connection is established. * @param host hostname or ip address to connect to * @param port service port number to connect to + * @param tcpNodelay true to disable Nagle algorithm */ - void establishConnection(const std::string& host, uint16_t port); + void establishConnection(const std::string& host, uint16_t port, + bool tcpNodelay = true); void setNonBlockingMode(); |
