diff options
Diffstat (limited to 'cpp/src/qpid/sys/apr')
| -rw-r--r-- | cpp/src/qpid/sys/apr/APRAcceptor.cpp | 2 | ||||
| -rw-r--r-- | cpp/src/qpid/sys/apr/Socket.cpp | 58 | ||||
| -rw-r--r-- | cpp/src/qpid/sys/apr/Socket.h | 75 |
3 files changed, 43 insertions, 92 deletions
diff --git a/cpp/src/qpid/sys/apr/APRAcceptor.cpp b/cpp/src/qpid/sys/apr/APRAcceptor.cpp index 8662e602c2..b353b698ef 100644 --- a/cpp/src/qpid/sys/apr/APRAcceptor.cpp +++ b/cpp/src/qpid/sys/apr/APRAcceptor.cpp @@ -56,8 +56,6 @@ Acceptor::shared_ptr Acceptor::create(int16_t port, int backlog, int threads, bo { return Acceptor::shared_ptr(new APRAcceptor(port, backlog, threads, trace)); } -// Must define Acceptor virtual dtor. -Acceptor::~Acceptor() {} APRAcceptor::APRAcceptor(int16_t port_, int backlog, int threads, bool trace_) : port(port_), diff --git a/cpp/src/qpid/sys/apr/Socket.cpp b/cpp/src/qpid/sys/apr/Socket.cpp index 6e64d656d2..577268844a 100644 --- a/cpp/src/qpid/sys/apr/Socket.cpp +++ b/cpp/src/qpid/sys/apr/Socket.cpp @@ -20,31 +20,56 @@ */ -#include "Socket.h" +#include "qpid/sys/Socket.h" + #include "APRBase.h" #include "APRPool.h" +#include <apr_network_io.h> + +namespace qpid { +namespace sys { + +class SocketPrivate { +public: + SocketPrivate(apr_socket_t* s = 0) : + socket(s) + {} + + apr_socket_t* socket; +}; + +Socket::Socket() : + impl(new SocketPrivate) +{ + createTcp(); +} + +Socket::Socket(SocketPrivate* sp) : + impl(sp) +{} -using namespace qpid::sys; +Socket::~Socket() { + delete impl; +} -Socket Socket::createTcp() { - Socket s; +void Socket::createTcp() const { + apr_socket_t*& socket = impl->socket; + apr_socket_t* s; CHECK_APR_SUCCESS( apr_socket_create( - &s.socket, APR_INET, SOCK_STREAM, APR_PROTO_TCP, + &s, APR_INET, SOCK_STREAM, APR_PROTO_TCP, APRPool::get())); - return s; -} - -Socket::Socket(apr_socket_t* s) { socket = s; } -void Socket::setTimeout(const Duration& interval) { +void Socket::setTimeout(const Duration& interval) const { + apr_socket_t*& socket = impl->socket; apr_socket_timeout_set(socket, interval/TIME_USEC); } -void Socket::connect(const std::string& host, int port) { +void Socket::connect(const std::string& host, int port) const { + apr_socket_t*& socket = impl->socket; apr_sockaddr_t* address; CHECK_APR_SUCCESS( apr_sockaddr_info_get( @@ -53,14 +78,16 @@ void Socket::connect(const std::string& host, int port) { CHECK_APR_SUCCESS(apr_socket_connect(socket, address)); } -void Socket::close() { +void Socket::close() const { + apr_socket_t*& socket = impl->socket; if (socket == 0) return; CHECK_APR_SUCCESS(apr_socket_close(socket)); socket = 0; } -ssize_t Socket::send(const void* data, size_t size) +ssize_t Socket::send(const void* data, size_t size) const { + apr_socket_t*& socket = impl->socket; apr_size_t sent = size; apr_status_t status = apr_socket_send(socket, reinterpret_cast<const char*>(data), &sent); @@ -70,8 +97,9 @@ ssize_t Socket::send(const void* data, size_t size) return sent; } -ssize_t Socket::recv(void* data, size_t size) +ssize_t Socket::recv(void* data, size_t size) const { + apr_socket_t*& socket = impl->socket; apr_size_t received = size; apr_status_t status = apr_socket_recv(socket, reinterpret_cast<char*>(data), &received); @@ -83,4 +111,4 @@ ssize_t Socket::recv(void* data, size_t size) return received; } - +}} // namespace qpid::sys diff --git a/cpp/src/qpid/sys/apr/Socket.h b/cpp/src/qpid/sys/apr/Socket.h deleted file mode 100644 index c20c36dcd9..0000000000 --- a/cpp/src/qpid/sys/apr/Socket.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef _sys_apr_Socket_h -#define _sys_apr_Socket_h - -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ - -#include <string> -#include "qpid/sys/Time.h" - -#include <apr_network_io.h> - -namespace qpid { -namespace sys { - -class Socket -{ - public: - /** Create an initialized TCP socket */ - static Socket createTcp(); - - /** Create a socket wrapper for descriptor. */ - Socket(apr_socket_t* descriptor = 0); - - /** Set timeout for read and write */ - void setTimeout(const Duration& interval); - - void connect(const std::string& host, int port); - - void close(); - - enum { SOCKET_TIMEOUT=-2, SOCKET_EOF=-3 } ErrorCode; - - /** Returns bytes sent or an ErrorCode value < 0. */ - ssize_t send(const void* data, size_t size); - - /** - * Returns bytes received, an ErrorCode value < 0 or 0 - * if the connection closed in an orderly manner. - */ - ssize_t recv(void* data, size_t size); - - /** Bind to a port and start listening. - *@param port 0 means choose an available port. - *@param backlog maximum number of pending connections. - *@return The bound port. - */ - int listen(int port = 0, int backlog = 10); - - /** Get file descriptor */ - int fd(); - - private: - apr_socket_t* socket; -}; - -}} -#endif /*!_sys_Socket_h*/ |
