// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <winsock2.h>

#include "net/base/winsock_init.h"

#include "base/lazy_instance.h"
#include "base/logging.h"

namespace {

class WinsockInitSingleton {
 public:
  WinsockInitSingleton() {
    WORD winsock_ver = MAKEWORD(2, 2);
    WSAData wsa_data;
    bool did_init = (WSAStartup(winsock_ver, &wsa_data) == 0);
    if (did_init) {
      DCHECK(wsa_data.wVersion == winsock_ver);

      // The first time WSAGetLastError is called, the delay load helper will
      // resolve the address with GetProcAddress and fixup the import.  If a
      // third party application hooks system functions without correctly
      // restoring the error code, it is possible that the error code will be
      // overwritten during delay load resolution.  The result of the first
      // call may be incorrect, so make sure the function is bound and future
      // results will be correct.
      WSAGetLastError();
    }
  }

  ~WinsockInitSingleton() {
    // Don't call WSACleanup() since the worker pool threads can continue to
    // call getaddrinfo() after Winsock has shutdown, which can lead to crashes.
  }
};

static base::LazyInstance<WinsockInitSingleton> g_winsock_init_singleton =
    LAZY_INSTANCE_INITIALIZER;

}  // namespace

namespace net {

void EnsureWinsockInit() {
  g_winsock_init_singleton.Get();
}

}  // namespace net
