void FUN_00403674(int param_1)

{
  ushort uVar1;
  int iVar2;
  char *pcVar3;
  int iVar4;
  hostent *phVar5;
  uint uVar6;
  int *piVar7;
  undefined **ppuVar8;
  undefined4 uVar9;
  int iVar10;
  code *pcVar11;
  sockaddr local_20;
  
  *(undefined4 *)(param_1 + 0x18) = 0;
  ppuVar8 = &PTR_s_CYBERGATE_0041aa00;
  iVar4 = 0;
  do {
    iVar10 = iVar4;
    pcVar3 = *ppuVar8;
    ppuVar8 = ppuVar8 + 6;
    if (pcVar3 == (char *)0x0) goto LAB_004036fc;
    iVar2 = strcmp(pcVar3,*(char **)(param_1 + 0x1c));
    iVar4 = iVar10 + 1;
  } while (iVar2 != 0);
  *(undefined ***)(param_1 + 0x18) = &PTR_s_CYBERGATE_0041aa00 + iVar10 * 6;
LAB_004036fc:
  if (*(int *)(param_1 + 0x18) == 0) {
    return;
  }
  if (*(int *)(param_1 + 0xc) != 0) {
    if (*(int *)(param_1 + 0x38) == 1) {
      pcVar11 = sloop_cancel_write_sock;
    }
    else {
      pcVar11 = sloop_cancel_read_sock;
    }
    (*pcVar11)();
    *(undefined4 *)(param_1 + 0xc) = 0;
  }
  if (*(int *)(param_1 + 0x10) != 0) {
    sloop_cancel_timeout();
    *(undefined4 *)(param_1 + 0x10) = 0;
  }
  if (-1 < *(int *)(param_1 + 8)) {
    close(*(int *)(param_1 + 8));
    *(undefined4 *)(param_1 + 8) = 0xffffffff;
  }
  *(undefined4 *)(param_1 + 0x3c) = 0;
  iVar4 = socket(2,2,6);
  *(int *)(param_1 + 8) = iVar4;
  if (-1 < iVar4) {
    phVar5 = gethostbyname(*(char **)(*(int *)(param_1 + 0x18) + 4));
    if (phVar5 == (hostent *)0x0) {
      syslog(5,"Unable to resolve the IP address of \'%s\'",
             *(undefined4 *)(*(int *)(param_1 + 0x18) + 8));
    }
    else {
      local_20.sa_data[6] = '\0';
      local_20.sa_data[7] = '\0';
      local_20.sa_data[8] = '\0';
      local_20.sa_data[9] = '\0';
      local_20.sa_data[10] = '\0';
      local_20.sa_data[0xb] = '\0';
      local_20.sa_data[0xc] = '\0';
      local_20.sa_data[0xd] = '\0';
      uVar1 = *(ushort *)(*(int *)(param_1 + 0x18) + 0xc);
      local_20.sa_data._2_4_ = *(undefined4 *)*phVar5->h_addr_list;
      local_20.sa_data._0_2_ = uVar1 << 8 | uVar1 >> 8;
      local_20.sa_family = 2;
      uVar6 = fcntl(*(int *)(param_1 + 8),3);
      if (-1 < (int)uVar6) {
        iVar4 = fcntl(*(int *)(param_1 + 8),4,uVar6 | 0x80);
        if (-1 < iVar4) {
          iVar4 = connect(*(int *)(param_1 + 8),&local_20,0x10);
          if (-1 < iVar4) {
            FUN_00403328(param_1);
            return;
          }
          piVar7 = __errno_location();
          if (*piVar7 == 0x96) {
            uVar9 = sloop_register_write_sock(*(undefined4 *)(param_1 + 8),FUN_00404418,param_1);
            *(undefined4 *)(param_1 + 0xc) = uVar9;
            uVar9 = sloop_register_timeout(0x3c,0,FUN_00404378,param_1);
            *(undefined4 *)(param_1 + 0x38) = 1;
            *(undefined4 *)(param_1 + 0x10) = uVar9;
            return;
          }
          uVar9 = *(undefined4 *)(*(int *)(param_1 + 0x18) + 8);
          pcVar3 = strerror(*piVar7);
          syslog(5,"Unable to connect server \'%s\'. %s",uVar9,pcVar3);
        }
      }
    }
  }
  if (-1 < *(int *)(param_1 + 8)) {
    close(*(int *)(param_1 + 8));
  }
  *(undefined4 *)(param_1 + 8) = 0xffffffff;
  *(undefined4 *)(param_1 + 0x38) = 3;
  FUN_004026ec(param_1);
  return;
}