22 #include <sys/select.h>
48 : m_fd (-1), m_readCallback (0), m_readThread (0), m_stop (false),
82 if (fcntl (
m_evpipe[0], F_SETFL, tmp | O_NONBLOCK) == -1)
131 if (len !=
sizeof (
zero))
133 NS_LOG_WARN (
"incomplete write(): " << std::strerror (errno));
174 FD_SET (
m_fd, &rfds);
180 fd_set readfds = rfds;
182 r = select (nfds, &readfds, NULL, NULL, NULL);
183 if (r == -1 && errno != EINTR)
188 if (FD_ISSET (
m_evpipe[0], &readfds))
194 ssize_t len = read (
m_evpipe[0], buf,
sizeof (buf));
201 if (errno == EAGAIN || errno == EINTR || errno == EWOULDBLOCK)
219 if (FD_ISSET (
m_fd, &readfds))
229 else if (
data.m_len > 0)
void Nullify(void)
Discard the implementation, set it to null.
bool IsRunning(void) const
This method is syntactic sugar for !IsExpired().
int m_evpipe[2]
Pipe used to signal events between threads.
void Stop(void)
Stop the read thread and reset internal state.
bool m_stop
Signal the read thread to stop.
virtual FdReader::Data DoRead(void)=0
The read implementation.
void DestroyEvent(void)
Event handler scheduled for destroy time to halt the thread.
EventId m_destroyEvent
The event scheduled for destroy time which will invoke DestroyEvent and halt the thread.
void Start(int fd, Callback< void, uint8_t *, ssize_t > readCallback)
Start a new read thread.
void Run(void)
The asynchronous function which performs the read.
int m_fd
The file descriptor to read from.
Ptr< SystemThread > m_readThread
The thread doing the read, created and launched by Start().
virtual ~FdReader()
Destructor.
Callback< void, uint8_t *, ssize_t > m_readCallback
The main thread callback function to invoke when we have data.
void Unref(void) const
Decrement the reference count.
void Ref(void) const
Increment the reference count.
static EventId ScheduleDestroy(FUNC f, Ts &&... args)
Schedule an event to run at the end of the simulation, when Simulator::Destroy() is called.
NS_FATAL_x macro definitions.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
ns3::SimpleRefCount declaration and template implementation.
ns3::Simulator declaration.
A structure representing data read.
System-independent thread class ns3::SystemThread declaration.
ns3::FdReader declaration.