Qore supports a simple event-handling mechanism to provide notification and details of socket and network events in higher-level classes. Classes currently supporting events are the Socket, HTTPClient, FtpClient, and File classes.
See Event Constants for a list of all event constants; details about each event are documented in the following sections.
Event information is placed on the event queue (which must be a Queue object) in the form of a hash. Each event has at least the following keys:
Event Hash Common Keys    
| Key  | Value   | 
event   | This key holds the event code; see information for individual events in the following sections   | 
source   | This key holds the event source code   | 
id   | The value of this key is a unique integer that can be used to uniquely identify the object generating the event.   | 
 
EVENT_PACKET_READ
- Event
 - Qore::EVENT_PACKET_READ
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately after a network packet is received.
 The event hash contains the following keys:
   
| Key  | Value   | 
event   | Qore::EVENT_PACKET_READ   | 
source   | Qore::SOURCE_SOCKET, indicating the Socket class   | 
id   | A unique integer ID for the underlying socket object   | 
read   | The number of bytes read in the packet.   | 
total_read   | The total number of bytes read in the read loop.   | 
[total_to_read]  | The total number of bytes to read in the read loop (this key is only present if the total number of bytes to read is known).   | 
 
 
EVENT_PACKET_SENT
- Event
 - Qore::EVENT_PACKET_SENT
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately after a network packet is sent.
 The event hash contains the following keys:
   
| Key  | Value   | 
event   | Qore::EVENT_PACKET_SENT   | 
source   | Qore::SOURCE_SOCKET, indicating the Socket class   | 
id   | A unique integer ID for the underlying socket object   | 
socket   | The file descriptor number of the socket.   | 
sent   | The number of bytes sent in the packet.   | 
total_sent   | The total number of bytes sent in the send loop.   | 
total_to_send   | The total number of bytes to send in the send loop.   | 
 
 
EVENT_HTTP_CONTENT_LENGTH
- Event
 - Qore::EVENT_HTTP_CONTENT_LENGTH
 
- Source
 - Qore::SOURCE_HTTPCLIENT
 
- Description
 - This event is raised immediately after an HTTP header is received containing a content length header line, but before the message body is received.
 The event hash contains the following keys:
   
 
 
EVENT_HTTP_CHUNKED_START
- Event
 - Qore::EVENT_HTTP_CHUNKED_START
 
- Source
 - Qore::SOURCE_HTTPCLIENT
 
- Description
 - This event is raised after receiving an HTTP header with the 
Transfer-Encoding header set to chunked and before the chunked data is read.
 The event hash contains the following keys:
   
 
 
EVENT_HTTP_CHUNKED_END
- Event
 - Qore::EVENT_HTTP_CHUNKED_END
 
- Source
 - Qore::SOURCE_HTTPCLIENT
 
- Description
 - This event is raised after all chunked data is read from the socket.
 The event hash contains the following keys:
   
 
 
EVENT_HTTP_REDIRECT
- Event
 - Qore::EVENT_HTTP_REDIRECT
 
- Source
 - Qore::SOURCE_HTTPCLIENT
 
- Description
 - This event is raised after a redirect response is received from an HTTP server.
 The event hash contains the following keys:
   
| Key  | Value   | 
event   | Qore::EVENT_HTTP_REDIRECT   | 
source   | Qore::SOURCE_HTTPCLIENT, indicating the HTTPClient class   | 
id   | A unique integer ID for the socket object.   | 
location   | The redirect location given by the HTTP server   | 
[status_message]  | Any status message sent by the HTTP server; if no message was sent, then this key will not be present in the event hash.   | 
 
 
EVENT_CHANNEL_CLOSED
- Event
 - Qore::EVENT_CHANNEL_CLOSED
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately after the socket is closed.
 The event hash contains the following keys:
   
 
 
EVENT_DELETED
- Event
 - Qore::EVENT_DELETED
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised when the socket object is deleted.
 The event hash contains the following keys:
   
 
 
EVENT_FTP_SEND_MESSAGE
- Event
 - Qore::EVENT_FTP_SEND_MESSAGE
 
- Source
 - Qore::SOURCE_FTPCLIENT
 
- Description
 - This event is raised immediately before a message is sent on the FTP control channel.
 The event hash contains the following keys:
   
 
 
EVENT_FTP_MESSAGE_RECEIVED
- Event
 - Qore::EVENT_FTP_MESSAGE_RECEIVED
 
- Source
 - Qore::SOURCE_FTPCLIENT
 
- Description
 - This event is raised immediately after a message is received on the FTP control channel.
 The event hash contains the following keys:
   
 
 
EVENT_HOSTNAME_LOOKUP
- Event
 - Qore::EVENT_HOSTNAME_LOOKUP
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately before a hostname lookup is made.
 The event hash contains the following keys:
   
 
 
EVENT_HOSTNAME_RESOLVED
- Event
 - Qore::EVENT_HOSTNAME_RESOLVED
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately after a successful hostname resolution.
 The event hash contains the following keys:
   
 
 
EVENT_HTTP_SEND_MESSAGE
- Event
 - Qore::EVENT_HTTP_SEND_MESSAGE
 
- Source
 - Qore::SOURCE_HTTPCLIENT or Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately before an HTTP message is sent.
 The event hash contains the following keys:
   
 
 
EVENT_HTTP_MESSAGE_RECEIVED
- Event
 - Qore::EVENT_HTTP_MESSAGE_RECEIVED
 
- Source
 - Qore::SOURCE_HTTPCLIENT or Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately after an HTTP message is received.
 The event hash contains the following keys:
   
| Key  | Value   | 
event   | Qore::EVENT_HTTP_MESSAGE_RECEIVED   | 
source   | Qore::SOURCE_HTTPCLIENT, indicating the HTTPClient class, or Qore::SOURCE_SOCKET, indicating the Socket class   | 
headers   | A hash of all headers received in the message, plus the following headers giving additional information about the message: 
 - "http_version": giving the HTTP protocol version in the message 
 - "status_code": giving the HTTP status code if the message is a response 
 - "status_message": giving any HTTP status message if the message is a response 
 - "method": giving the HTTP method if the message is a request 
 - "path": providing the path in request messages.   | 
 
 
EVENT_HTTP_FOOTERS_RECEIVED
- Event
 - Qore::EVENT_HTTP_FOOTERS_RECEIVED
 
- Source
 - Qore::SOURCE_HTTPCLIENT
 
- Description
 - This event is raised immediately after HTTP footers are received after receiving chunked data.
 The event hash contains the following keys:
   
 
 
EVENT_HTTP_CHUNKED_DATA_RECEIVED
- Event
 - Qore::EVENT_HTTP_CHUNKED_DATA_RECEIVED
 
- Source
 - Qore::SOURCE_HTTPCLIENT
 
- Description
 - This event is raised immediately after chunked data is received.
 The event hash contains the following keys:
   
 
 
EVENT_HTTP_CHUNK_SIZE
- Event
 - Qore::EVENT_HTTP_CHUNK_SIZE
 
- Source
 - Qore::SOURCE_HTTPCLIENT
 
- Description
 - This event is raised immediately after chunk information is received providing the size of the next chunk.
 The event hash contains the following keys:
   
 
 
EVENT_CONNECTING
- Event
 - Qore::EVENT_CONNECTING
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately before a socket connection is attempted.
 The event hash contains the following keys:
   
| Key  | Value   | 
event   | Qore::EVENT_CONNECTING   | 
source   | Qore::SOURCE_SOCKET, indicating the Socket class   | 
id   | A unique integer ID for the underlying socket object   | 
type   | The type of address for the socket; one of the Network Address Family Constants   | 
typename   | A descriptive name for the address family (ex: "ipv4", "ipv6")   | 
address   | A string giving the target address (ex: "::1", "192.168.20.4")   | 
target   | The target address for the connection.   | 
[port]  | The target port for the connection; if not applicable for the address family then this hash key is not included.   | 
 
 
EVENT_CONNECTED
- Event
 - Qore::EVENT_CONNECTED
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately after a socket connection is established.
 The event hash contains the following keys:
   
 
 
EVENT_START_SSL
- Event
 - Qore::EVENT_START_SSL
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately before SSL negotiation is attempted.
 The event hash contains the following keys:
   
 
 
EVENT_SSL_ESTABLISHED
- Event
 - Qore::EVENT_SSL_ESTABLISHED
 
- Source
 - Qore::SOURCE_SOCKET
 
- Description
 - This event is raised immediately after SSL negotiation has been successfully established.
 The event hash contains the following keys:
   
| Key  | Value   | 
event   | Qore::EVENT_SSL_ESTABLISHED   | 
source   | Qore::SOURCE_SOCKET, indicating the Socket class   | 
id   | A unique integer ID for the underlying socket object   | 
cipher   | A string giving the name of the cipher algorithm used for the connection.   | 
cipher_version   | A string giving the version of the cipher algorithm used for the connection.   | 
 
 
EVENT_OPEN_FILE
- Event
 - Qore::EVENT_OPEN_FILE
 
- Source
 - Qore::SOURCE_FILE
 
- Description
 - This event is raised immediately before a file is opened.
 The event hash contains the following keys:
   
 
 
EVENT_FILE_OPENED
- Event
 - Qore::EVENT_FILE_OPENED
 
- Source
 - Qore::SOURCE_FILE
 
- Description
 - This event is raised immediately after a file has been successfully opened.
 The event hash contains the following keys:
   
 
 
EVENT_DATA_READ
- Event
 - Qore::EVENT_DATA_READ
 
- Source
 - Qore::SOURCE_FILE
 
- Description
 - This event is raised immediately after data is read from a file.
 The event hash contains the following keys:
   
| Key  | Value   | 
event   | Qore::EVENT_DATA_READ   | 
source   | Qore::SOURCE_FILE, indicating the File class   | 
id   | A unique integer ID for the File object   | 
read   | The number of bytes read from the file.   | 
total_read   | The total number of bytes read in the read loop.   | 
total_to_read   | The total number of bytes to read in the read loop.   | 
 
 
EVENT_DATA_WRITTEN
- Event
 - Qore::EVENT_DATA_WRITTEN
 
- Source
 - Qore::SOURCE_FILE
 
- Description
 - This event is raised immediately after data is written from a file.
 The event hash contains the following keys:
   
| Key  | Value   | 
event   | Qore::EVENT_DATA_WRITTEN   | 
source   | Qore::SOURCE_FILE, indicating the File class   | 
id   | A unique integer ID for the File object   | 
written   | The number of bytes written to the file.   | 
total_written   | The total number of bytes written in the write loop.   | 
total_to_write   | The total number of bytes to write in the write loop.   |