License:
BSD style: see license.txt
author:
Juan Jose Comellas
- class
PollSelector
: tango.io.selector.AbstractSelector.AbstractSelector;
- Selector that uses the poll() system call to receive I/O events for
the registered conduits. To use this class you would normally do
something like this:
Examples:
import tango.io.selector.PollSelector;
Socket socket;
ISelector selector = new PollSelector();
selector.open(100, 10);
// Register to read from socket
selector.register(socket, Event.Read);
int eventCount = selector.select(0.1); // 0.1 seconds
if (eventCount > 0)
{
// We can now read from the socket
socket.read();
}
else if (eventCount == 0)
{
// Timeout
}
else if (eventCount == -1)
{
// Another thread called the wakeup() method.
}
else
{
// Error: should never happen.
}
selector.close();
- alias
select
;
- Alias for the
select
() method as we're not reimplementing it in
this class.
- const uint
DefaultSize
;
- Default number of SelectionKey's that will be handled by the
PollSelector.
- void
open
(uint size = 64u, uint maxEvents = 64u);
- Open the poll()-based selector.
Params:
| uint size |
maximum amount of conduits that will be registered;
it will grow dynamically if needed. |
| uint maxEvents |
maximum amount of conduit events that will be
returned in the selection set per call to select();
this value is currently not used by this selector. |
- void
close
();
- Close the selector.
Remarks:
It can be called multiple times without harmful side-effects.
- void
register
(ISelectable conduit, Event events, Object attachment = cast(Object)null);
- Associate a conduit to the selector and track specific I/O events.
If a conduit is already associated, modify the events and
attachment.
Params:
| ISelectable conduit |
conduit that will be associated to the selector;
must be a valid conduit (i.e. not null and open). |
| Event events |
bit mask of Event values that represent the events
that will be tracked for the conduit. |
| Object attachment |
optional object with application-specific data that
will be available when an event is triggered for the
conduit |
Throws:
RegisteredConduitException if the conduit had already been
registered to the selector.
Examples:
selector.register(conduit, Event.Read | Event.Write, object);
- void
unregister
(ISelectable conduit);
- Remove a conduit from the selector.
Params:
| ISelectable conduit |
conduit that had been previously associated to the
selector; it can be null. |
Remarks:
Unregistering a null conduit is allowed and no exception is thrown
if this happens.
Throws:
UnregisteredConduitException if the conduit had not been previously
registered to the selector.
- int
select
(TimeSpan timeout);
- Wait for I/O events from the registered conduits for a specified
amount of time.
Params:
| TimeSpan timeout |
Timespan with the maximum amount of time that the
selector will wait for events from the conduits; the
amount of time is relative to the current system time
(i.e. just the number of milliseconds that the selector
has to wait for the events). |
Returns:
The amount of conduits that have received events; 0 if no conduits
have received events within the specified timeout; and -1 if the
wakeup() method has been called from another thread.
Throws:
InterruptedSystemCallException if the underlying system call was
interrupted by a signal and the 'restartInterruptedSystemCall'
property was set to false; SelectorException if there were no
resources available to wait for events from the conduits.
- ISelectionSet
selectedSet
();
- Return the selection set resulting from the call to any of the
select() methods.
Remarks:
If the call to select() was unsuccessful or it did not return any
events, the returned value will be null.
- SelectionKey
key
(ISelectable conduit);
- Return the selection
key
resulting from the registration of a
conduit to the selector.
Remarks:
If the conduit is not registered to the selector the returned
value will be null. No exception will be thrown by this method.
|