void __usercall sub_410B10(int a1<edi>)
{
  SOCKET v1; // ebp@3
  SOCKET v2; // ST18_4@3
  int v3; // eax@5
  ULONG_PTR v4; // esi@5
  int v5; // ecx@6
  int v6; // eax@8
  int v7; // edx@8
  int v8; // eax@8
  int v9; // ecx@12
  char v10; // [sp+Ch] [bp-30h]@1
  char cbBytesReturned; // [sp+13h] [bp-29h]@8
  int addrlen; // [sp+14h] [bp-28h]@3
  int vInBuffer; // [sp+18h] [bp-24h]@8
  int v14; // [sp+1Ch] [bp-20h]@8
  int v15; // [sp+20h] [bp-1Ch]@8
  struct sockaddr addr; // [sp+24h] [bp-18h]@3
  unsigned int v17; // [sp+34h] [bp-8h]@1  v17 = (unsigned int)&v10 ^ dword_616274;
  if ( WaitForSingleObject(*(HANDLE *)(a1 + 164), 0) )
  {
    if ( !*(_DWORD *)(a1 + 20) )
    {
      v2 = *(_DWORD *)(a1 + 160);
      addrlen = 16;
      v1 = accept(v2, &addr, &addrlen);
      if ( v1 != -1 || WSAGetLastError() == 10035 )
      {
        v3 = sub_4117A0(a1);
        v4 = v3;
        if ( v3 )
        {
          *(_DWORD *)(v3 + 4) = v1;
          *(_DWORD *)(v3 + 60) = v3 + 64;
          *(_DWORD *)(v3 + 56) = 8192;
          if ( CreateIoCompletionPort((HANDLE)v1, *(HANDLE *)(a1 + 172), v3, 0) == *(HANDLE *)(a1 + 172) )
          {
            cbBytesReturned = 1;
            setsockopt(*(_DWORD *)(v4 + 4), 65535, 8, &cbBytesReturned, 1);
            v7 = *(_DWORD *)(a1 + 176); //
            vInBuffer = 1;
            v14 = v7; //
            v15 = 10000;
            v8 = WSAIoctl(*(_DWORD *)(v4 + 4), 0x98000004u, &vInBuffer, 0xCu, 0, 0, (LPDWORD)&cbBytesReturned, 0, 0);
            sub_404FD0(v8, a1 + 64);
            sub_4119F0(a1 + 36, v4);
            (*(void (__thiscall **)(int))(*(_DWORD *)(a1 + 64) + 20))(a1 + 64);
            v6 = operator new(0x18u);
            if ( v6 )
            {
              *(_DWORD *)v6 = 0;
              *(_DWORD *)(v6 + 4) = 0;
              *(_DWORD *)(v6 + 8) = 0;
              *(_DWORD *)(v6 + 12) = 0;
              *(_DWORD *)(v6 + 16) = 0;
              *(_DWORD *)(v6 + 20) = 0;
            }
            else
            {
              v6 = 0;
            }
            if ( PostQueuedCompletionStatus(*(HANDLE *)(a1 + 172), 0, v4, (LPOVERLAPPED)v6) || GetLastError() == 997 )
            {
              (*(void (__stdcall **)(_DWORD, ULONG_PTR, signed int))(a1 + 4))(*(_DWORD *)(a1 + 8), v4, 1);
              if ( *(_DWORD *)(a1 + 28) )
                sub_410EA0(v4, a1);
            }
            else
            {
              sub_411560(v9, a1, v4, 1);
            }
          }
          else
          {
            sub_411560(v5, a1, v4, 1);
            closesocket(v1);
            closesocket(*(_DWORD *)(a1 + 160));
          }
        }
      }
    }
  }
}