You have to loop for the header lines, and again for the file.
Code:
on *:sockread:download:{
  if $sockerr { echo -eat * Socket error: $sock(download).wserr $sock(download).wsmsg }
  while !$sock($sockname).mark {
    sockread %size
    if (Content-Length: * iswm %size) {
      set %file.size $gettok(%size,2,32)
      did -a update.now 2 %file.size
    }
    if !%size { sockmark $sockname $ticks | echo -sg $sock($sockname).mark }
  }
  while $sock($sockname) {
    sockread &temp
    if (!$sockbr) return
    bwrite %version $+ .exe -1 &temp
    did -ra update.now 4 $bytes($sock(download).rcvd,m3).suf
    did -ra update.now 6 $dur($sock(download).to)
    if $file(%version $+ .exe).size == %file.size {
      echo -eat * %version $+ .exe downloaded in $calc(($ticks - $sock($sockname).mark)*.001) secs
    }
  }
}