mirror of https://github.com/aria2/aria2
2010-02-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Removed ret == 0 checking for SSL_read(), SSL_write() and SSL_peek() because the checks are done in the caller. In SocketBuffer::send(), throw exception if nothing could be written and socket error was not EWOULDBLOCK * src/SocketBuffer.cc * src/SocketCore.ccpull/1/head
parent
a6a174a0b2
commit
3842161f9b
|
@ -1,3 +1,12 @@
|
||||||
|
2010-02-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Removed ret == 0 checking for SSL_read(), SSL_write() and
|
||||||
|
SSL_peek() because the checks are done in the caller. In
|
||||||
|
SocketBuffer::send(), throw exception if nothing could be written
|
||||||
|
and socket error was not EWOULDBLOCK
|
||||||
|
* src/SocketBuffer.cc
|
||||||
|
* src/SocketCore.cc
|
||||||
|
|
||||||
2010-02-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2010-02-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Fixed error code handling so that it can handle Winsock2 error
|
Fixed error code handling so that it can handle Winsock2 error
|
||||||
|
|
|
@ -33,9 +33,14 @@
|
||||||
*/
|
*/
|
||||||
/* copyright --> */
|
/* copyright --> */
|
||||||
#include "SocketBuffer.h"
|
#include "SocketBuffer.h"
|
||||||
#include "SocketCore.h"
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
|
#include "SocketCore.h"
|
||||||
|
#include "DlAbortEx.h"
|
||||||
|
#include "message.h"
|
||||||
|
#include "StringFormat.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
SocketBuffer::SocketBuffer(const SharedHandle<SocketCore>& socket):
|
SocketBuffer::SocketBuffer(const SharedHandle<SocketCore>& socket):
|
||||||
|
@ -61,6 +66,9 @@ ssize_t SocketBuffer::send()
|
||||||
}
|
}
|
||||||
ssize_t len = _socket->writeData(_sendbuf.c_str(),
|
ssize_t len = _socket->writeData(_sendbuf.c_str(),
|
||||||
_sendbuf.size());
|
_sendbuf.size());
|
||||||
|
if(len == 0 && !_socket->wantRead() && !_socket->wantWrite()) {
|
||||||
|
throw DL_ABORT_EX(StringFormat(EX_SOCKET_SEND, "Connection closed.").str());
|
||||||
|
}
|
||||||
_sendbuf.erase(0, len);
|
_sendbuf.erase(0, len);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
|
@ -624,11 +624,6 @@ ssize_t SocketCore::writeData(const char* data, size_t len)
|
||||||
} else {
|
} else {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
ret = SSL_write(ssl, data, len);
|
ret = SSL_write(ssl, data, len);
|
||||||
if(ret == 0) {
|
|
||||||
throw DL_RETRY_EX
|
|
||||||
(StringFormat
|
|
||||||
(EX_SOCKET_SEND, ERR_error_string(SSL_get_error(ssl, ret), 0)).str());
|
|
||||||
}
|
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
ret = sslHandleEAGAIN(ret);
|
ret = sslHandleEAGAIN(ret);
|
||||||
}
|
}
|
||||||
|
@ -675,13 +670,6 @@ void SocketCore::readData(char* data, size_t& len)
|
||||||
// for SSL
|
// for SSL
|
||||||
// TODO handling len == 0 case required
|
// TODO handling len == 0 case required
|
||||||
ret = SSL_read(ssl, data, len);
|
ret = SSL_read(ssl, data, len);
|
||||||
if(ret == 0) {
|
|
||||||
// TODO Check this is really an error with SSL_get_error().
|
|
||||||
// Or not throw exception and just return 0
|
|
||||||
throw DL_RETRY_EX
|
|
||||||
(StringFormat
|
|
||||||
(EX_SOCKET_RECV, ERR_error_string(SSL_get_error(ssl, ret), 0)).str());
|
|
||||||
}
|
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
ret = sslHandleEAGAIN(ret);
|
ret = sslHandleEAGAIN(ret);
|
||||||
}
|
}
|
||||||
|
@ -728,11 +716,6 @@ void SocketCore::peekData(char* data, size_t& len)
|
||||||
// for SSL
|
// for SSL
|
||||||
// TODO handling len == 0 case required
|
// TODO handling len == 0 case required
|
||||||
ret = SSL_peek(ssl, data, len);
|
ret = SSL_peek(ssl, data, len);
|
||||||
if(ret == 0) {
|
|
||||||
throw DL_RETRY_EX
|
|
||||||
(StringFormat(EX_SOCKET_PEEK,
|
|
||||||
ERR_error_string(SSL_get_error(ssl, ret), 0)).str());
|
|
||||||
}
|
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
ret = sslHandleEAGAIN(ret);
|
ret = sslHandleEAGAIN(ret);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue