You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
89 lines
2.0 KiB
89 lines
2.0 KiB
// |
|
// detail/posix_fd_set_adapter.hpp |
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
// |
|
// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
|
// |
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying |
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
|
// |
|
|
|
#ifndef BOOST_ASIO_DETAIL_POSIX_FD_SET_ADAPTER_HPP |
|
#define BOOST_ASIO_DETAIL_POSIX_FD_SET_ADAPTER_HPP |
|
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1200) |
|
# pragma once |
|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) |
|
|
|
#include <boost/asio/detail/config.hpp> |
|
|
|
#if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__) |
|
|
|
#include <cstring> |
|
#include <boost/asio/detail/noncopyable.hpp> |
|
#include <boost/asio/detail/socket_types.hpp> |
|
|
|
#include <boost/asio/detail/push_options.hpp> |
|
|
|
namespace boost { |
|
namespace asio { |
|
namespace detail { |
|
|
|
// Adapts the FD_SET type to meet the Descriptor_Set concept's requirements. |
|
class posix_fd_set_adapter : noncopyable |
|
{ |
|
public: |
|
posix_fd_set_adapter() |
|
: max_descriptor_(invalid_socket) |
|
{ |
|
using namespace std; // Needed for memset on Solaris. |
|
FD_ZERO(&fd_set_); |
|
} |
|
|
|
void reset() |
|
{ |
|
using namespace std; // Needed for memset on Solaris. |
|
FD_ZERO(&fd_set_); |
|
} |
|
|
|
bool set(socket_type descriptor) |
|
{ |
|
if (descriptor < (socket_type)FD_SETSIZE) |
|
{ |
|
if (max_descriptor_ == invalid_socket || descriptor > max_descriptor_) |
|
max_descriptor_ = descriptor; |
|
FD_SET(descriptor, &fd_set_); |
|
return true; |
|
} |
|
return false; |
|
} |
|
|
|
bool is_set(socket_type descriptor) const |
|
{ |
|
return FD_ISSET(descriptor, &fd_set_) != 0; |
|
} |
|
|
|
operator fd_set*() |
|
{ |
|
return &fd_set_; |
|
} |
|
|
|
socket_type max_descriptor() const |
|
{ |
|
return max_descriptor_; |
|
} |
|
|
|
private: |
|
mutable fd_set fd_set_; |
|
socket_type max_descriptor_; |
|
}; |
|
|
|
} // namespace detail |
|
} // namespace asio |
|
} // namespace boost |
|
|
|
#include <boost/asio/detail/pop_options.hpp> |
|
|
|
#endif // !defined(BOOST_WINDOWS) && !defined(__CYGWIN__) |
|
|
|
#endif // BOOST_ASIO_DETAIL_POSIX_FD_SET_ADAPTER_HPP
|
|
|