Sha256: 9780819d18b2a48982212df532128f16d4a3c4728d89a3f04598c5f4d74ae832

Contents?: true

Size: 1.45 KB

Versions: 29

Compression:

Stored size: 1.45 KB

Contents

#include <Gosu/Sockets.hpp>
#include <GosuImpl/Sockets/Sockets.hpp>
#include <cassert>
#include <cstring>

struct Gosu::ListenerSocket::Impl
{
    Socket socket;
};

Gosu::ListenerSocket::ListenerSocket(SocketPort port)
: pimpl(new Impl)
{
    pimpl->socket.setHandle(socketCheck(::socket(AF_INET, SOCK_STREAM, 0)));
    pimpl->socket.setBlocking(false);

    int enable = 1;
    socketCheck(::setsockopt(pimpl->socket.handle(), SOL_SOCKET, SO_REUSEADDR,
        reinterpret_cast<char*>(&enable), sizeof enable));

    sockaddr_in addr;
    std::memset(&addr, 0, sizeof addr);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    addr.sin_port = htons(port);
    socketCheck(::bind(pimpl->socket.handle(),
        reinterpret_cast<sockaddr*>(&addr), sizeof addr));
    socketCheck(::listen(pimpl->socket.handle(), 10));
}

Gosu::ListenerSocket::~ListenerSocket()
{
}

Gosu::SocketAddress Gosu::ListenerSocket::address() const
{
    return pimpl->socket.address();
}

Gosu::SocketPort Gosu::ListenerSocket::port() const
{
    return pimpl->socket.port();
}

void Gosu::ListenerSocket::update()
{
    while (onConnection)
    {
        SocketHandle newHandle =
            socketCheck(::accept(pimpl->socket.handle(), 0, 0));

        if (newHandle == INVALID_SOCKET)
            break;

        Socket newSocket;
        newSocket.setHandle(newHandle);
        onConnection(newSocket);
    }
}

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
gosu-0.7.47.1 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.46 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.45 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.44 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.43 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.41 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.40 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.39 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.38 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.37 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.36.2 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.35 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.33 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.32 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.31 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.30 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.29 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.28 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.27.1 GosuImpl/Sockets/ListenerSocket.cpp
gosu-0.7.27 GosuImpl/Sockets/ListenerSocket.cpp