return;
}
- pending.WaitOne ();
+ if (!pending.WaitOne (ReadTimeout))
+ throw new WebException ("The operation has timed out.", WebExceptionStatus.Timeout);
lock (locker) {
if (totalRead >= contentLength)
return;
if (result.EndCalled)
return;
+ if (sendChunked) {
+ lock (locker) {
+ pendingWrites--;
+ if (pendingWrites <= 0)
+ pending.Set ();
+ }
+ }
+
result.EndCalled = true;
if (result.AsyncWriteAll) {
result.WaitUntilComplete ();
if (result.GotException)
throw result.Exception;
-
- if (sendChunked) {
- lock (locker) {
- pendingWrites--;
- if (pendingWrites == 0)
- pending.Set ();
- }
- }
}
public override void Write (byte [] buffer, int offset, int size)
disposed = true;
}
+ internal bool GetResponseOnClose {
+ get; set;
+ }
+
public override void Close ()
{
+ if (GetResponseOnClose) {
+ if (disposed)
+ return;
+ disposed = true;
+ var response = (HttpWebResponse)request.GetResponse ();
+ response.ReadAll ();
+ response.Close ();
+ return;
+ }
+
if (sendChunked) {
if (disposed)
return;
disposed = true;
- pending.WaitOne ();
+ if (!pending.WaitOne (WriteTimeout)) {
+ throw new WebException ("The operation has timed out.", WebExceptionStatus.Timeout);
+ }
byte [] chunk = Encoding.ASCII.GetBytes ("0\r\n\r\n");
string err_msg = null;
cnc.Write (request, chunk, 0, chunk.Length, ref err_msg);