return make_shared<Socket>(fd);
}
-void Socket::Poll(bool read, bool write)
+bool Socket::Poll(bool read, bool write)
{
+ int rc;
+
#ifdef _WIN32
fd_set readfds, writefds, exceptfds;
FD_ZERO(&exceptfds);
FD_SET(GetFD(), &exceptfds);
- if (select(GetFD() + 1, &readfds, &writefds, &exceptfds, NULL) < 0) {
+ rc = select(GetFD() + 1, &readfds, &writefds, &exceptfds, NULL);
+
+ if (rc < 0) {
std::ostringstream msgbuf;
msgbuf << "select() failed with return code " << WSAGetLastError() << ", \"" << Utility::FormatErrorNumber(WSAGetLastError()) << "\"";
Log(LogCritical, "Socket", msgbuf.str());
pfd.events = (read ? POLLIN : 0) | (write ? POLLOUT : 0);
pfd.revents = 0;
- if (poll(&pfd, 1, -1) < 0) {
+ rc = poll(&pfd, 1, -1);
+
+ if (rc < 0) {
std::ostringstream msgbuf;
msgbuf << "poll() failed with return code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
Log(LogCritical, "Socket", msgbuf.str());
<< boost::errinfo_errno(errno));
}
#endif /* _WIN32 */
+
+ return (rc != 0);
}
void Socket::MakeNonBlocking(void)
#else /* _WIN32 */
Utility::SetNonBlocking(GetFD());
#endif /* _WIN32 */
-}
\ No newline at end of file
+}