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

undefined4 main(int param_1,char **param_2)

{
  int iVar1;
  size_t sVar2;
  int *piVar3;
  ssize_t sVar4;
  char *pcVar5;
  undefined4 uVar6;
  char *pcVar7;
  uint uVar8;
  int iVar9;
  int local_b0;
  fd_set local_ac;
  
  pipe((int *)&signal_pipe)   //possible issue identified - semgrep
  signal(0xf,FUN_00401c94)   //possible issue identified - semgrep
  signal(0x10,FUN_00401c94)   //possible issue identified - semgrep
  signal(0x11,FUN_00401c94)   //possible issue identified - semgrep
  DAT_00414b4c = "ToBeOrNotToBe";
  o_name = "ToBeOrNotToBe";
  DAT_00414b44 = "ToBeOrNotToBe";
  DAT_00414b48 = "ToBeOrNotToBe";
  iVar9 = 0;
LAB_004016a0:
  iVar1 = getopt(param_1,param_2,"hvi:p:r:")   //possible issue identified - semgrep
  if (0 < iVar1) {
    uVar6 = 0xffffffff;
    switch(iVar1) {
    case 0x68:
      uVar6 = 0;
      break;
    case 0x69:
      o_interface = _optarg;
      goto LAB_004016a0;
    case 0x6a:
    case 0x6b:
    case 0x6c:
    case 0x6d:
    case 0x6e:
    case 0x6f:
    case 0x71:
    case 0x73:
    case 0x74:
    case 0x75:
      uVar6 = 0xffffffff;
      break;
    case 0x70:
      o_ifinet6 = _optarg;
      goto LAB_004016a0;
    case 0x72:
      if (iVar9 < 4) {
        (&o_name)[iVar9] = _optarg;
        iVar9 = iVar9 + 1;
      }
      else {
        printf("exceed max resolv %d ,ignore %s\n",4,_optarg);
      }
      goto LAB_004016a0;
    case 0x76:
      goto switchD_00401614_caseD_76;
    }
    FUN_00400e80(uVar6);
    goto LAB_004016a0;
  }
  iVar9 = msock_init();
  if (iVar9 < 0) {
    verbose("%s: msock_init() fail!\n",&DAT_0040445c);
    return 1;
  }
  verbose("******************************************************************\n");
  verbose("%s: o_interface=\"%s\"\n",&DAT_0040445c,o_interface);
  pcVar5 = o_name;
  sVar2 = strlen(o_name);
  verbose("%s: o_name=\"%s\" (%u)\n",&DAT_0040445c,pcVar5,sVar2);
  pcVar5 = DAT_00414b44;
  sVar2 = strlen(DAT_00414b44);
  verbose("%s: o_name=\"%s\" (%u)\n",&DAT_0040445c,pcVar5,sVar2);
  pcVar5 = DAT_00414b48;
  sVar2 = strlen(DAT_00414b48);
  verbose("%s: o_name=\"%s\" (%u)\n",&DAT_0040445c,pcVar5,sVar2);
  pcVar5 = DAT_00414b4c;
  sVar2 = strlen(DAT_00414b4c);
  verbose("%s: o_name=\"%s\" (%u)\n",&DAT_0040445c,pcVar5,sVar2);
  verbose("%s: o_ifinet6=\"%s\"\n",&DAT_0040445c,o_ifinet6);
  verbose("%s: o_verbose=%d\n",&DAT_0040445c,DAT_00414b30);
  verbose("%s: msockfd4=%d\n",&DAT_0040445c,msockfd4);
  verbose("%s: msockfd6=%d\n",&DAT_0040445c,msockfd6);
  verbose("%s: signal_pipe[0]=%d\n",&DAT_0040445c,signal_pipe);
  verbose("%s: signal_pipe[1]=%d\n",&DAT_0040445c,DAT_00414b00);
  verbose("******************************************************************\n");
  if (((((int)signal_pipe < 0) || (DAT_00414b00 < 0)) || ((int)msockfd4 < 0)) || ((int)msockfd6 < 0)
     ) {
    verbose("%s: fd_check() fail!! signal_pipe[0]=%d, signal_pipe[1]=%d, msockfd4=%d, msockfd6=%d\n"
            ,"fd_check",signal_pipe,DAT_00414b00,msockfd4,msockfd6);
    msock_deinit();
    iVar9 = -1;
LAB_00401be0:
                    /* WARNING: Subroutine does not return */
    exit(iVar9);
  }
  uVar8 = 0;
LAB_00401954:
  for (; uVar8 < 0x20; uVar8 = uVar8 + 1) {
    local_ac.fds_bits[uVar8] = 0;
  }
  local_ac.fds_bits[signal_pipe >> 5] =
       local_ac.fds_bits[signal_pipe >> 5] | 1 << (signal_pipe & 0x1f);
  local_ac.fds_bits[msockfd4 >> 5] = local_ac.fds_bits[msockfd4 >> 5] | 1 << (msockfd4 & 0x1f);
  local_ac.fds_bits[msockfd6 >> 5] = local_ac.fds_bits[msockfd6 >> 5] | 1 << (msockfd6 & 0x1f);
  uVar8 = msockfd4;
  if ((int)msockfd4 < (int)signal_pipe) {
    uVar8 = signal_pipe;
  }
  if ((int)uVar8 < (int)msockfd6) {
    uVar8 = msockfd6;
  }
  iVar9 = select(uVar8 + 1,&local_ac,(fd_set *)0x0,(fd_set *)0x0,(timeval *)0x0);
  if (iVar9 == 0) {
    pcVar7 = "%s: ?? seconds elapsed. \n";
    pcVar5 = "main";
  }
  else {
    if (iVar9 < 0) {
      piVar3 = __errno_location();
      if (*piVar3 != 4) {
        verbose("%s: select() fail!\n",&DAT_0040445c);
        msock_deinit();
        return 0xffffffff;
      }
      pcVar7 = "%s: got signale but res < 0\n";
      pcVar5 = "main";
      goto LAB_00401b9c;
    }
    if (((uint)local_ac.fds_bits[signal_pipe >> 5] >> (signal_pipe & 0x1f) & 1) == 0) {
      if (((uint)local_ac.fds_bits[msockfd4 >> 5] >> (msockfd4 & 0x1f) & 1) != 0) {
        max_udp_pdu_size = 0x5c0;
LAB_00401c50:
        FUN_004012c4();
        goto LAB_00401c58;
      }
      if (((uint)local_ac.fds_bits[msockfd6 >> 5] >> (msockfd6 & 0x1f) & 1) != 0) {
        max_udp_pdu_size = 0x5ac;
        goto LAB_00401c50;
      }
LAB_00401950:
      uVar8 = 0;
      goto LAB_00401954;
    }
    sVar4 = read(signal_pipe,&local_b0,4)   //possible issue identified - semgrep
    iVar9 = local_b0;
    if (sVar4 < 0) {
      piVar3 = __errno_location();
      pcVar5 = strerror(*piVar3);
      verbose("%s: Could not read signal: %s",&DAT_0040445c,pcVar5);
      goto LAB_00401c58;
    }
    pcVar5 = "SIGUSR1";
    if ((local_b0 != 0x10) && (pcVar5 = "SIGTERM", local_b0 == 0x11)) {
      pcVar5 = "SIGUSR2";
    }
    verbose("%s: process signal -- [%s]\n","process_sig",pcVar5);
    if (iVar9 != 0x10) {
      if (iVar9 == 0x11) {
        pcVar7 = "%s: sig_usr2()\n";
        pcVar5 = "sig_usr2";
        goto LAB_00401b9c;
      }
      if (iVar9 != 0xf) goto LAB_00401950;
      verbose("%s: sig_term()\n","sig_term");
      msock_deinit();
      iVar9 = 0;
      goto LAB_00401be0;
    }
    pcVar7 = "%s: sig_usr1()\n";
    pcVar5 = "sig_usr1";
  }
LAB_00401b9c:
  verbose(pcVar7,pcVar5);
LAB_00401c58:
  uVar8 = 0;
  goto LAB_00401954;
switchD_00401614_caseD_76:
  DAT_00414b30 = DAT_00414b30 + 1;
  goto LAB_004016a0;
}