tango.io.selector.PollSelector

License:

BSD style: see license.txt

Author:

Juan Jose Comellas <juanjo@comellas.com.ar>
class PollSelector : AbstractSelector [public]
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 AbstractSelector.select select
Alias for the select() method as we're not reimplementing it in this class.
uint DefaultSize [public, const]
Default number of SelectionKey's that will be handled by the PollSelector.
void open(uint size = DefaultSize, uint maxEvents = DefaultSize) [public, override]
Open the poll()-based selector.

Parameters:

sizemaximum amount of conduits that will be registered; it will grow dynamically if needed.
maxEventsmaximum 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() [public, override]
Close the selector.

Remarks:

It can be called multiple times without harmful side-effects.
void register(ISelectable conduit, Event events, Object attachment = null) [public, override]
Associate a conduit to the selector and track specific I/O events. If a conduit is already associated, modify the events and attachment.

Parameters:

conduitconduit that will be associated to the selector; must be a valid conduit (i.e. not null and open).
eventsbit mask of Event values that represent the events that will be tracked for the conduit.
attachmentoptional 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:

1
selector.register(conduit, Event.Read | Event.Write, object);
void unregister(ISelectable conduit) [public, override]
Remove a conduit from the selector.

Parameters:

conduitconduit 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) [public, override]
Wait for I/O events from the registered conduits for a specified amount of time.

Parameters:

timeoutTimespan 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() [public, override]
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) [public, override]
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 SelectionKey.init. No exception will be thrown by this method.
size_t count() [public, override]
Return the number of keys resulting from the registration of a conduit to the selector.
int opApply(scope int delegate(ref SelectionKey sk) dg) [public]
Iterate through the currently registered selection keys. Note that you should not erase or add any items from the selector while iterating, although you can register existing conduits again.