Trait lightning::ln::peer_handler::SocketDescriptor[][src]

pub trait SocketDescriptor: Eq + Hash + Clone {
    fn send_data(&mut self, data: &[u8], resume_read: bool) -> usize;
fn disconnect_socket(&mut self); }
Expand description

Provides an object which can be used to send data to and which uniquely identifies a connection to a remote host. You will need to be able to generate multiple of these which meet Eq and implement Hash to meet the PeerManager API.

For efficiency, Clone should be relatively cheap for this type.

Two descriptors may compare equal (by cmp::Eq and hash::Hash) as long as the original has been disconnected, the PeerManager has been informed of the disconnection (either by it having triggered the disconnection or a call to PeerManager::socket_disconnected), and no further calls to the PeerManager related to the original socket occur. This allows you to use a file descriptor for your SocketDescriptor directly, however for simplicity you may wish to simply use another value which is guaranteed to be globally unique instead.

Required methods

Attempts to send some data from the given slice to the peer.

Returns the amount of data which was sent, possibly 0 if the socket has since disconnected. Note that in the disconnected case, PeerManager::socket_disconnected must still be called and further write attempts may occur until that time.

If the returned size is smaller than data.len(), a PeerManager::write_buffer_space_avail call must be made the next time more data can be written. Additionally, until a send_data event completes fully, no further PeerManager::read_event calls should be made for the same peer! Because this is to prevent denial-of-service issues, you should not read or buffer any data from the socket until then.

If a PeerManager::read_event call on this descriptor had previously returned true (indicating that read events should be paused to prevent DoS in the send buffer), resume_read may be set indicating that read events on this descriptor should resume. A resume_read of false carries no meaning, and should not cause any action.

Disconnect the socket pointed to by this SocketDescriptor.

You do not need to call PeerManager::socket_disconnected with this socket after this call (doing so is a noop).

Implementors