1
////////////////////////////////////////////////////////////
3
// SFML - Simple and Fast Multimedia Library
4
// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com)
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.
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:
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.
18
// 2. Altered source versions must be plainly marked as such,
19
// and must not be misrepresented as being the original software.
21
// 3. This notice may not be removed or altered from any source distribution.
23
////////////////////////////////////////////////////////////
25
////////////////////////////////////////////////////////////
27
////////////////////////////////////////////////////////////
28
#include <SFML/Network/SocketHelper.hpp>
33
////////////////////////////////////////////////////////////
34
/// Return the value of the invalid socket
35
////////////////////////////////////////////////////////////
36
SocketHelper::SocketType SocketHelper::InvalidSocket()
38
return INVALID_SOCKET;
42
////////////////////////////////////////////////////////////
43
/// Close / destroy a socket
44
////////////////////////////////////////////////////////////
45
bool SocketHelper::Close(SocketHelper::SocketType Socket)
47
return closesocket(Socket) != -1;
51
////////////////////////////////////////////////////////////
52
/// Set a socket as blocking or non-blocking
53
////////////////////////////////////////////////////////////
54
void SocketHelper::SetBlocking(SocketHelper::SocketType Socket, bool Block)
56
unsigned long Blocking = Block ? 0 : 1;
57
ioctlsocket(Socket, FIONBIO, &Blocking);
61
////////////////////////////////////////////////////////////
62
/// Get the last socket error status
63
////////////////////////////////////////////////////////////
64
Socket::Status SocketHelper::GetErrorStatus()
66
switch (WSAGetLastError())
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;
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
89
WSAStartup(MAKEWORD(2,2), &InitData);
98
SocketInitializer GlobalInitializer;