blob: aae25ab55d4ff0a875f8748b02b88375cae36a1c [file] [log] [blame]
Roger Meier84e4a3c2011-09-16 20:58:44 +00001/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20#include "StdAfx.h"
21#include "TWinsockSingleton.h"
22
23// boost
24#include <boost/assert.hpp>
25
26namespace apache { namespace thrift { namespace transport {
27
28TWinsockSingleton::instance_ptr TWinsockSingleton::instance_ptr_(NULL);
29boost::once_flag TWinsockSingleton::flags_ = BOOST_ONCE_INIT;
30
31//------------------------------------------------------------------------------
32TWinsockSingleton::TWinsockSingleton(void)
33{
34 WORD version(MAKEWORD(2, 2));
35 WSAData data = {0};
36
37 int error(WSAStartup(version, &data));
38 if (error != 0)
39 {
40 BOOST_ASSERT(false);
41 throw std::runtime_error("Failed to initialise Winsock.");
42 }
43}
44
45//------------------------------------------------------------------------------
46TWinsockSingleton::~TWinsockSingleton(void)
47{
48 WSACleanup();
49}
50
51//------------------------------------------------------------------------------
52void TWinsockSingleton::create(void)
53{
54 boost::call_once(init, flags_);
55}
56
57//------------------------------------------------------------------------------
58void TWinsockSingleton::init(void)
59{
60 instance_ptr_.reset(new TWinsockSingleton);
61}
62
63}}} // apache::thrift::transport