mirror of
https://github.com/zeromq/libzmq.git
synced 2025-11-04 20:31:03 +01:00
fix computation of winsock fd_set size (#3151)
* fix computation of winsock fd_set size
This commit is contained in:
@@ -128,30 +128,32 @@ inline size_t valid_pollset_bytes (const fd_set &pollset_)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined ZMQ_HAVE_WINDOWS
|
#if defined ZMQ_HAVE_WINDOWS
|
||||||
|
// struct fd_set {
|
||||||
|
// u_int fd_count;
|
||||||
|
// SOCKET fd_array[1];
|
||||||
|
// };
|
||||||
|
// NOTE: offsetof(fd_set, fd_array)==sizeof(SOCKET) on both x86 and x64
|
||||||
|
// due to alignment bytes for the latter.
|
||||||
class optimized_fd_set_t
|
class optimized_fd_set_t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit optimized_fd_set_t (size_t nevents_) : _fd_set (nevents_) {}
|
explicit optimized_fd_set_t (size_t nevents_) : _fd_set (1 + nevents_) {}
|
||||||
|
|
||||||
fd_set *get () { return reinterpret_cast<fd_set *> (&_fd_set[0]); }
|
fd_set *get () { return reinterpret_cast<fd_set *> (&_fd_set[0]); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
fast_vector_t<char, sizeof (u_int) + ZMQ_POLLITEMS_DFLT * sizeof (SOCKET)>
|
fast_vector_t<SOCKET, 1 + ZMQ_POLLITEMS_DFLT> _fd_set;
|
||||||
_fd_set;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class resizable_optimized_fd_set_t
|
class resizable_optimized_fd_set_t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void resize (size_t nevents_) { _fd_set.resize (nevents_); }
|
void resize (size_t nevents_) { _fd_set.resize (1 + nevents_); }
|
||||||
|
|
||||||
fd_set *get () { return reinterpret_cast<fd_set *> (&_fd_set[0]); }
|
fd_set *get () { return reinterpret_cast<fd_set *> (&_fd_set[0]); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
resizable_fast_vector_t<char,
|
resizable_fast_vector_t<SOCKET, 1 + ZMQ_POLLITEMS_DFLT> _fd_set;
|
||||||
sizeof (u_int)
|
|
||||||
+ ZMQ_POLLITEMS_DFLT * sizeof (SOCKET)>
|
|
||||||
_fd_set;
|
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
class optimized_fd_set_t
|
class optimized_fd_set_t
|
||||||
|
|||||||
Reference in New Issue
Block a user