Sha256: 47049e0567c7c5e6653df0c2b78db457202c617044452f42016289d7e70c120b

Contents?: true

Size: 1.84 KB

Versions: 35

Compression:

Stored size: 1.84 KB

Contents

#include "ioserver.h"
using namespace LCBTest;

SockFD::SockFD(int sock)
{
    assert(sock >= 0);
    fd = sock;
    naddr = sizeof(sa_local);
    int rv = getsockname(fd, (struct sockaddr *)&sa_local, &naddr);
    assert(rv == 0);
}

void
SockFD::loadRemoteAddr()
{
    socklen_t lentmp = sizeof(sa_remote);
    getpeername(*this, (struct sockaddr *)&sa_remote, &lentmp);
}

void
SockFD::close()
{
    if (fd != -1) {
        shutdown(fd, SHUT_RDWR);
        ::closesocket(fd);
        fd = -1;
    }
}

SockFD::~SockFD()
{
    close();
}

SockFD *
SockFD::acceptClient()
{
    struct sockaddr_storage newaddr;
    socklen_t newlen = sizeof(newaddr);
    int newsock = accept(*this, (struct sockaddr *)&newaddr, &newlen);
    return new SockFD(newsock);
}

SockFD *
SockFD::newListener()
{
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));

    int lsnfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    addr.sin_port = 0;
    bind(lsnfd, (struct sockaddr *)&addr, sizeof(addr));
    listen(lsnfd, 5);
    return new SockFD(lsnfd);
}

SockFD *
SockFD::newClient(SockFD *server)
{
    int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    assert(sockfd >= 0);
    int rv = connect(sockfd, (struct sockaddr *)&server->localAddr4(),
                     sizeof(struct sockaddr_in));
    assert(rv == 0);
    return new SockFD(sockfd);
}

#ifndef _WIN32
std::string
SockFD::getHostCommon(sockaddr_storage *ss)
{
    struct sockaddr_in *addr = (struct sockaddr_in *)ss;
    char buf[4096];
    inet_ntop(AF_INET, &addr->sin_addr, buf, sizeof(*addr));
    return std::string(buf);

}
#else
std::string
SockFD::getHostCommon(sockaddr_storage *ss)
{
    struct sockaddr_in *inaddr = (struct sockaddr_in *)ss;
    char *buf = inet_ntoa(inaddr->sin_addr);
    return std::string(buf);
}
#endif

Version data entries

35 entries across 35 versions & 2 rubygems

Version Path
mt-libcouchbase-1.4.03 ext/libcouchbase/tests/ioserver/socket.cc
mt-libcouchbase-1.4.02 ext/libcouchbase/tests/ioserver/socket.cc
mt-libcouchbase-1.4.01 ext/libcouchbase/tests/ioserver/socket.cc
mt-libcouchbase-1.4.0 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.3.2 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.3.0 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.8 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.7 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.6 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.5 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.4 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.3 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.2 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.1 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.2.0 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.1.1 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.1.0 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.0.4 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.0.3 ext/libcouchbase/tests/ioserver/socket.cc
libcouchbase-1.0.2 ext/libcouchbase/tests/ioserver/socket.cc