void FUN_00402b0c(int param_1,char *param_2,void *param_3,uint param_4)

{
  int *piVar1;
  ssize_t sVar2;
  char *pcVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  undefined4 uVar10;
  char *pcVar11;
  sockaddr local_40;
  uint local_30;
  
  local_40.sa_data[0xc] = *(char *)((int)param_3 + 0x24);
  local_40.sa_data[0xd] = *(char *)((int)param_3 + 0x25);
  local_40.sa_data._6_2_ = *(undefined2 *)(param_2 + 0x24);
  local_40.sa_data._2_4_ = *(undefined4 *)param_2;
  local_40.sa_family = 0x11;
  local_40.sa_data[0] = -0x7a;
  local_40.sa_data[1] = -0x23;
  local_40.sa_data[0xb] = '3';
  local_30 = (uint)*(ushort *)((int)param_3 + 0x26);
  local_40.sa_data[10] = '3';
  local_40.sa_data[9] = '\x06';
  local_40.sa_data[8] = '\0';
  param_4 = param_4 & 0xffff;
  piVar1 = __errno_location();
  iVar5 = g_conf;
  *piVar1 = 0;
  sVar2 = sendto(*(int *)(iVar5 + 0x40),param_3,param_4,0,&local_40,0x14);
  iVar5 = g_conf;
  if (sVar2 < 0) {
    iVar5 = *piVar1;
    if (iVar5 == 6) {
      dolog(7,"[%-5s] couldn\'t send %u bytes, received ENXIO, destroying interface %u\n",
            param_2 + 4,param_4,*(undefined4 *)param_2);
      int_destroy(param_2);
    }
    else {
      pcVar11 = param_2 + 4;
      uVar10 = *(undefined4 *)(param_2 + 0x18);
      if (iVar5 == 0x61) {
        pcVar3 = strerror(0x61);
        dolog(7,"[%-5s] sending %u bytes failed, mtu = %u: %s (%d)\n",pcVar11,param_4,uVar10,pcVar3,
              *piVar1);
        DAT_0041a424 = 0;
        FUN_00402080(param_2,1);
        dolog(7,"[%-5s] after force update interface, now mtu = %u\n",pcVar11,
              *(undefined4 *)(param_2 + 0x18));
        if (param_1 != 0) {
          if ((((*(int *)(param_1 + 0x44) == 0) && (*(int *)(param_1 + 0x48) == 0)) &&
              (*(int *)(param_1 + 0x4c) == 0)) && (*(int *)(param_1 + 0x50) == 0)) {
            dolog(7,
                  "[%-5s] prepare send ICMPv6 Packet Too Big with src is unspecified ... abrogating this action!!\n"
                  ,pcVar11);
          }
          else if ((*(char *)((int)param_3 + 6) == ':') && (*(char *)((int)param_3 + 0x28) == -0x80)
                  ) {
            FUN_00402710(param_1,(int)param_3 + 8,2,0,param_3,param_4,
                         *(undefined4 *)(param_2 + 0x18));
          }
        }
      }
      else {
        pcVar3 = strerror(iVar5);
        dolog(7,"[%-5s] sending %u bytes failed, mtu = %u: %s (%d)\n",pcVar11,param_4,uVar10,pcVar3,
              *piVar1);
      }
    }
  }
  else {
    uVar6 = *(uint *)(g_conf + 0x58);
    uVar4 = *(uint *)(g_conf + 0x68);
    iVar9 = *(int *)(g_conf + 0x5c);
    piVar1 = (int *)(g_conf + 0x6c);
    uVar7 = uVar6 + 1;
    uVar8 = uVar4 + param_4;
    *(uint *)(g_conf + 0x68) = uVar8;
    *(uint *)(iVar5 + 0x6c) = (uint)(uVar8 < uVar4) + *piVar1;
    *(uint *)(iVar5 + 0x58) = uVar7;
    *(uint *)(iVar5 + 0x5c) = (uint)(uVar7 < uVar6) + iVar9;
    uVar4 = *(uint *)(param_2 + 0x70);
    param_4 = uVar4 + param_4;
    uVar6 = *(uint *)(param_2 + 0x60) + 1;
    *(uint *)(param_2 + 100) = (uint)(uVar6 < *(uint *)(param_2 + 0x60)) + *(int *)(param_2 + 100);
    *(uint *)(param_2 + 0x70) = param_4;
    *(uint *)(param_2 + 0x74) = (uint)(param_4 < uVar4) + *(int *)(param_2 + 0x74);
    *(uint *)(param_2 + 0x60) = uVar6;
  }
  return;
}