~registry/dolphin-emu/triforce

« back to all changes in this revision

Viewing changes to Externals/SFML/src/SFML/Network/Win32/SocketHelper.cpp

  • Committer: Sérgio Benjamim
  • Date: 2015-02-13 05:54:40 UTC
  • Revision ID: sergio_br2@yahoo.com.br-20150213055440-ey2rt3sjpy27km78
Dolphin Triforce branch from code.google, commit b957980 (4.0-315).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
////////////////////////////////////////////////////////////
 
2
//
 
3
// SFML - Simple and Fast Multimedia Library
 
4
// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com)
 
5
//
 
6
// This software is provided 'as-is', without any express or implied warranty.
 
7
// In no event will the authors be held liable for any damages arising from the use of this software.
 
8
//
 
9
// Permission is granted to anyone to use this software for any purpose,
 
10
// including commercial applications, and to alter it and redistribute it freely,
 
11
// subject to the following restrictions:
 
12
//
 
13
// 1. The origin of this software must not be misrepresented;
 
14
//    you must not claim that you wrote the original software.
 
15
//    If you use this software in a product, an acknowledgment
 
16
//    in the product documentation would be appreciated but is not required.
 
17
//
 
18
// 2. Altered source versions must be plainly marked as such,
 
19
//    and must not be misrepresented as being the original software.
 
20
//
 
21
// 3. This notice may not be removed or altered from any source distribution.
 
22
//
 
23
////////////////////////////////////////////////////////////
 
24
 
 
25
////////////////////////////////////////////////////////////
 
26
// Headers
 
27
////////////////////////////////////////////////////////////
 
28
#include <SFML/Network/SocketHelper.hpp>
 
29
 
 
30
 
 
31
namespace sf
 
32
{
 
33
////////////////////////////////////////////////////////////
 
34
/// Return the value of the invalid socket
 
35
////////////////////////////////////////////////////////////
 
36
SocketHelper::SocketType SocketHelper::InvalidSocket()
 
37
{
 
38
    return INVALID_SOCKET;
 
39
}
 
40
 
 
41
 
 
42
////////////////////////////////////////////////////////////
 
43
/// Close / destroy a socket
 
44
////////////////////////////////////////////////////////////
 
45
bool SocketHelper::Close(SocketHelper::SocketType Socket)
 
46
{
 
47
    return closesocket(Socket) != -1;
 
48
}
 
49
 
 
50
 
 
51
////////////////////////////////////////////////////////////
 
52
/// Set a socket as blocking or non-blocking
 
53
////////////////////////////////////////////////////////////
 
54
void SocketHelper::SetBlocking(SocketHelper::SocketType Socket, bool Block)
 
55
{
 
56
    unsigned long Blocking = Block ? 0 : 1;
 
57
    ioctlsocket(Socket, FIONBIO, &Blocking);
 
58
}
 
59
 
 
60
 
 
61
////////////////////////////////////////////////////////////
 
62
/// Get the last socket error status
 
63
////////////////////////////////////////////////////////////
 
64
Socket::Status SocketHelper::GetErrorStatus()
 
65
{
 
66
    switch (WSAGetLastError())
 
67
    {
 
68
        case WSAEWOULDBLOCK :  return Socket::NotReady;
 
69
        case WSAECONNABORTED : return Socket::Disconnected;
 
70
        case WSAECONNRESET :   return Socket::Disconnected;
 
71
        case WSAETIMEDOUT :    return Socket::Disconnected;
 
72
        case WSAENETRESET :    return Socket::Disconnected;
 
73
        case WSAENOTCONN :     return Socket::Disconnected;
 
74
        default :              return Socket::Error;
 
75
    }
 
76
}
 
77
 
 
78
 
 
79
////////////////////////////////////////////////////////////
 
80
// Windows needs some initialization and cleanup to get
 
81
// sockets working properly... so let's create a class that will
 
82
// do it automatically
 
83
////////////////////////////////////////////////////////////
 
84
struct SocketInitializer
 
85
{
 
86
    SocketInitializer()
 
87
    {
 
88
        WSADATA InitData;
 
89
        WSAStartup(MAKEWORD(2,2), &InitData);
 
90
    }
 
91
 
 
92
    ~SocketInitializer()
 
93
    {
 
94
        WSACleanup();
 
95
    }
 
96
};
 
97
 
 
98
SocketInitializer GlobalInitializer;
 
99
 
 
100
} // namespace sf