Sockets are rind’s communication endpoints, such as UDS, TCP or UDP sockets that keep active to be relayed into an owner service, treated as Resources.

[[socket]]
name = "my_socket"
type = "uds"
listen = "/var/sock/my.sock"
FieldTypePurpose
namestringUnique socket name
typestringuds (Unix domain socket), tcp, udp
listenstringPath (uds) or address:port (tcp/udp)
ownerstringOwning service reference, e.g. "group:service_name"
lifecyclestringmanaged (daemon manages, default) or owned (service manages)
start-onarrayFlowItem conditions to create the socket
stop-onarrayConditions to remove the socket
on-startarrayTrigger actions on socket creation
on-stoparrayTrigger actions on socket removal
triggerarrayTrigger actions on incoming data/connection
managed-byarrayPermission names that can manage lifecycle
permissionsarrayPermission names required to connect

Socket Types

[[socket]]
name = "unix-socket"
type = "uds"
listen = "/var/sock/app.sock"
 
[[socket]]
name = "tcp-socket"
type = "tcp"
listen = "0.0.0.0:8080"

Lifecycle

Service lifecycle imples the lifecycle of the owner service. When managed, the owner service starts on it’s own and owned means the owner service gets started when the socket triggers instead of waiting for the socket’s events.

[[socket]]
name = "managed-socket"
type = "uds"
listen = "/var/sock/managed.sock"
lifecycle = "managed"
owner = "my-group:my-service"
 
[[socket]]
name = "owned-socket"
type = "uds"
listen = "/var/sock/owned.sock"
owner = "my-group:my-service"
lifecycle = "owned"

Start and Trigger

Sockets, just like Services, can start on conditions and trigger actions on incoming data:

[[socket]]
name = "ipcs_s"
type = "uds"
listen = "/var/sock/some.sock"
owner = "test:ipcs"
start-on = [{ facet = "net:configured" }]
trigger = [{ impulse = "test:thething", payload = "()" }]

When a client connects and sends data, the trigger actions fire.

On-Start / On-Stop

[[socket]]
name = "api-socket"
type = "uds"
listen = "/var/sock/api.sock"
on-start = [{ impulse = "api:ready" }]
on-stop = [{ impulse = "api:stopped" }]

See also: Services, IPC