mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-12 18:20:26 +01:00
fix(Socket): Socket::select EPOLL implementation returns socket in exceptList when empty list is given #3655; mark select as deprecated #1459
This commit is contained in:
parent
672d64bfc5
commit
93e58b4468
@ -130,6 +130,7 @@ public:
|
||||
void close();
|
||||
/// Closes the socket.
|
||||
|
||||
//@deprecated
|
||||
static int select(SocketList& readList, SocketList& writeList, SocketList& exceptList, const Poco::Timespan& timeout);
|
||||
/// Determines the status of one or more sockets,
|
||||
/// using a call to select().
|
||||
@ -159,6 +160,9 @@ public:
|
||||
/// the closed socket will not be included in any list.
|
||||
/// In this case, the return value may be greater than the sum
|
||||
/// of all sockets in all list.
|
||||
///
|
||||
/// This function is deprecated and may be removed in the future releases,
|
||||
/// please use PollSet class instead.
|
||||
|
||||
bool poll(const Poco::Timespan& timeout, int mode) const;
|
||||
/// Determines the status of the socket, using a
|
||||
|
@ -219,12 +219,14 @@ int Socket::select(SocketList& readList, SocketList& writeList, SocketList& exce
|
||||
SocketList readyExceptList;
|
||||
for (int n = 0; n < rc; ++n)
|
||||
{
|
||||
if (eventsOut[n].events & EPOLLERR)
|
||||
readyExceptList.push_back(*reinterpret_cast<Socket*>(eventsOut[n].data.ptr));
|
||||
Socket sock = *reinterpret_cast<Socket*>(eventsOut[n].data.ptr);
|
||||
if ((eventsOut[n].events & EPOLLERR) &&
|
||||
(std::end(exceptList) != std::find(exceptList.begin(), exceptList.end(), sock)))
|
||||
readyExceptList.push_back(sock);
|
||||
if (eventsOut[n].events & EPOLLIN)
|
||||
readyReadList.push_back(*reinterpret_cast<Socket*>(eventsOut[n].data.ptr));
|
||||
readyReadList.push_back(sock);
|
||||
if (eventsOut[n].events & EPOLLOUT)
|
||||
readyWriteList.push_back(*reinterpret_cast<Socket*>(eventsOut[n].data.ptr));
|
||||
readyWriteList.push_back(sock);
|
||||
}
|
||||
std::swap(readList, readyReadList);
|
||||
std::swap(writeList, readyWriteList);
|
||||
|
Loading…
Reference in New Issue
Block a user