/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

ssize_t FUN_0041f034(int *param_1,void *param_2,size_t param_3)

{
  ssize_t sVar1;
  uint uVar2;
  uint uVar3;
  int *piVar4;
  uint *__buf;
  uint local_408;
  short local_404;
  
  sVar1 = send(*param_1,param_2,param_3,0);
  if (sVar1 < 0) {
    return sVar1;
  }
  __buf = &local_408;
  uVar2 = recv(*param_1,__buf,0x400,0x42)   //possible issue identified - semgrep
  if ((int)uVar2 < 0) {
    piVar4 = __errno_location();
    if (*piVar4 != 0xb) {
      return -1;
    }
  }
  else {
    if ((int)uVar2 < 0x10) {
      return 0;
    }
    if ((0xf < local_408) && (local_408 <= uVar2)) {
      while( true ) {
        if (local_404 == 2) {
          if (0x23 < local_408) {
            piVar4 = __errno_location();
            *piVar4 = -__buf[4];
            return -1;
          }
          fwrite("ERROR truncated\n",1,0x10,_stderr);
          return -1;
        }
        uVar3 = local_408 + 3 & 0xfffffffc;
        uVar2 = uVar2 - uVar3;
        __buf = (uint *)((int)__buf + uVar3);
        if ((int)uVar2 < 0x10) break;
        local_408 = *__buf;
        if (local_408 < 0x10) {
          return 0;
        }
        if (uVar2 < local_408) {
          return 0;
        }
        local_404 = (short)__buf[1]   //possible issue identified - semgrep
      }
    }
  }
  return 0;
}