Vladimir Dubrovin 7 лет назад
Родитель
Сommit
b7c667a682
1 измененных файлов с 12 добавлено и 9 удалено
  1. 12 9
      src/sockmap.c

+ 12 - 9
src/sockmap.c

@@ -56,12 +56,12 @@ int splicemap(struct clientparam * param, int timeo){
 	if(socksend(param->clisock, param->srvbuf + param->srvoffset, tosend, conf.timeouts[STRING_S]) != tosend){
 		return 96;
 	}
-	if(param->waitserver64) param->waitserver64 -= tosend;
 	if(!needcontinue){
 		param->srvoffset += tosend;
-		param->srvinbuf -= tosend;
-		return 0;
+		if(param->srvoffset == param->srvinbuf) param->srvoffset = param->srvinbuf = 0;
+		return 98;
 	}
+	received += tosend;
 	param->srvoffset = param->srvinbuf = 0;
  }
  tosend = param->cliinbuf - param->clioffset;
@@ -74,20 +74,23 @@ int splicemap(struct clientparam * param, int timeo){
 	if(socksend(param->remsock, param->clibuf + param->clioffset, tosend, conf.timeouts[STRING_S]) != tosend){
 		return 97;
 	}
-	if(param->waitclient64) param->waitclient64 -= tosend;
 	if(!needcontinue){
 		param->clioffset += tosend;
-		param->cliinbuf -= tosend;
-		return 0;
+		if(param->clioffset == param->cliinbuf) param->clioffset = param->cliinbuf = 0;
+		return 99;
 	}
-	param->srvoffset = param->srvinbuf = 0;
+	sent += tosend;
+	param->clioffset = param->cliinbuf = 0;
  }
 
  if(!param->waitserver64 && !param->waitclient64){
 	myfree(param->srvbuf);
 	param->srvbuf = NULL;
-	myfree(param->srvbuf);
-	param->srvbuf = NULL;
+	param->srvbufsize = 0;
+	myfree(param->clibuf);
+	param->clibuf = NULL;
+	param->clibufsize = 0;
+	param->srvinbuf = param->srvoffset = param->cliinbuf = param->clioffset = 0;
  }
 
  param->res = 0;