diff --git a/src/SSLSocket.m b/src/SSLSocket.m index 85ad610..4425fbe 100644 --- a/src/SSLSocket.m +++ b/src/SSLSocket.m @@ -355,20 +355,24 @@ locking_callback(int mode, int n, const char *file, int line) - (void)lowlevelWriteBuffer: (const void *)buffer length: (size_t)length { - if (length > INT_MAX) - @throw [OFOutOfRangeException exception]; + int bytesWritten; if (_socket == INVALID_SOCKET) @throw [OFNotOpenException exceptionWithObject: self]; - if (_atEndOfStream) - @throw [OFWriteFailedException exceptionWithObject: self - requestedLength: length - errNo: ENOTCONN]; + if (length > INT_MAX) + @throw [OFOutOfRangeException exception]; - if (SSL_write(_SSL, buffer, (int)length) < length) + if ((bytesWritten = SSL_write(_SSL, buffer, (int)length)) < 0) @throw [OFWriteFailedException exceptionWithObject: self requestedLength: length + bytesWritten: 0 + errNo: 0]; + + if ((size_t)bytesWritten != length) + @throw [OFWriteFailedException exceptionWithObject: self + requestedLength: length + bytesWritten: bytesWritten errNo: 0]; }