Fossil SCM

win32 'fossil pull' or other client side commands hang up if peer unexpected shutdown.

Fixed

66cbcd56a229f33… · opened 17 years, 4 months ago

Type
Code_Defect
Priority
Severity
Minor
Resolution
Fixed
Subsystem
Created
Nov. 27, 2008 6:50 a.m.

win32 client receive data function 'socket_read_blob()' (declared in "http.c") call 'recv()' and test return value is negative or else. but if peer unexpected shutdown 'recv()' returns zero. so this functon enters infinite-loop. to fix it, return value is negative or equal to zero as error.

  while ( i<nToRead ){
      read = recv(pSockId, rbuf, 50, 0);
      i += read;
-     if( read<0 ){
+     if( read<=0 ){
        return 0;
      }
      blob_append(pBlob, rbuf, read);
  }

drh added on 2008-11-27 13:51:22:
Fixed by check-in [c12e5b102ee6079715da0fa4eff7fb502b68b111]


anonymous claiming to be silov.e added on 2008-12-03 06:31:42:
Thank you for fix problems

By the way, on many OSes, recv(2) (or read(2)) returns zero if peer unexpected or expected shutdown is normal behavior. It meanings no more data or end of stream. This behavior is not win32 quirks.

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button