Fix Connection Management Blueprint
Manages TCP connections for FIX protocol engines including server-side acceptors, client-side initiators, SSL/TLS encryption, automatic reconnection, and socket configuration
| Feature | fix-connection-management |
| Category | Integration |
| Version | 1.0.0 |
| Tags | fix-protocol, tcp, acceptor, initiator, ssl, reconnection, financial-messaging |
| YAML Source | View on GitHub |
| JSON API | fix-connection-management.json |
Actors
| ID | Name | Type | Description |
|---|---|---|---|
socket_acceptor | Socket Acceptor | system | Server-side component that binds to a port and accepts incoming TCP connections from trading counterparties |
socket_initiator | Socket Initiator | system | Client-side component that establishes outbound TCP connections to remote FIX servers |
ssl_layer | SSL/TLS Layer | system | Optional TLS termination layer wrapping plain socket connections for encrypted FIX messaging |
application | Application Layer | system | Business application that receives connection lifecycle events |
Fields
| Name | Type | Required | Label | Description |
|---|---|---|---|---|
connection_type | select | Yes | Connection Type | |
socket_accept_port | number | No | Socket Accept Port | |
socket_connect_host | text | No | Socket Connect Host | |
socket_connect_port | number | No | Socket Connect Port | |
socket_connect_source_host | text | No | Socket Connect Source Host | |
socket_connect_source_port | number | No | Socket Connect Source Port | |
reconnect_interval | number | No | Reconnect Interval | |
socket_nodelay | boolean | No | Socket Nodelay | |
socket_send_buffer_size | number | No | Socket Send Buffer Size | |
socket_receive_buffer_size | number | No | Socket Receive Buffer Size | |
socket_reuse_address | boolean | No | Socket Reuse Address | |
host_selection_policy | select | No | Host Selection Policy | |
ssl_certificate | text | No | Ssl Certificate | |
ssl_private_key | text | No | Ssl Private Key | |
ssl_ca_certificate | text | No | Ssl Ca Certificate |
States
State field: connection_state
Values:
| State | Initial | Terminal |
|---|---|---|
stopped | Yes | |
pending | ||
connected | ||
disconnected |
Transitions:
| Name | From | To | Actor | Condition |
|---|---|---|---|---|
stopped | pending | socket_initiator | ||
stopped | connected | socket_acceptor | ||
pending | connected | socket_initiator | ||
pending | disconnected | socket_initiator | ||
connected | disconnected | system | ||
disconnected | pending | socket_initiator |
Rules
- acceptor_binding: Acceptor binds to SocketAcceptPort and listens for incoming connections, Each accepted connection is mapped to a session based on SenderCompID/TargetCompID in the Logon message, SocketReuseAddress=Y allows the acceptor to restart without waiting for OS port release
- initiator_reconnection: On connection loss, initiator waits ReconnectInterval seconds before reattempting, Multiple target hosts can be configured (SocketConnectHost1, SocketConnectHost2, etc.) for failover, HostSelectionPolicy controls which host is tried first and how priority-based failover works
- ssl_security: SSL sessions use the same configuration as plain sessions but wrap the socket in TLS, Certificate and private key paths must be configured before starting, CA certificate path enables mutual TLS (mTLS) peer verification, SSL and non-SSL sessions cannot mix on the same port
- socket_tuning: TCP_NODELAY disables Nagle’s algorithm for sub-millisecond message delivery; recommended for low-latency trading, Buffer sizes should be tuned based on expected message throughput; larger buffers reduce system calls
- threading: Each connection runs I/O on a dedicated thread pool; session callbacks are invoked from I/O threads, Applications sharing state across sessions must synchronize access or use SynchronizedApplication wrapper
SLA
| Scope | Max Duration | Escalation |
|---|---|---|
| reconnect_interval | 30s | |
| connection_timeout | 10s |
Outcomes
Port_bind_failed (Priority: 1) — Error: PORT_BIND_FAILED
Given:
- acceptor is starting
- configured SocketAcceptPort is already in use
Then:
- emit_event event:
fix.connection.error
Result: Acceptor startup fails with ConfigError; application is notified
Ssl_handshake_failed (Priority: 2) — Error: SSL_HANDSHAKE_FAILED
Given:
- TCP connection established
- SSL/TLS is enabled
- certificate verification or cipher negotiation fails
Then:
- transition_state field:
connection_statefrom:pendingto:disconnected - emit_event event:
fix.connection.error
Result: Connection dropped; initiator will retry after reconnect interval
Connection_refused (Priority: 3) — Error: CONNECTION_REFUSED
Given:
- initiator is attempting to connect
- target host refuses the connection or is unreachable
Then:
- transition_state field:
connection_statefrom:pendingto:disconnected - emit_event event:
fix.connection.failed
Result: Connection attempt fails; initiator waits ReconnectInterval before retrying
Connection_lost (Priority: 4) — Error: CONNECTION_LOST
Given:
- session is in connected or logged_on state
- TCP socket receives error or zero-byte read (peer closed connection)
Then:
- transition_state field:
connection_statefrom:connectedto:disconnected - emit_event event:
fix.connection.lost
Result: Session is disconnected; initiator begins reconnect cycle
Connection_established (Priority: 9)
Given:
- initiator completes TCP handshake OR acceptor accepts incoming connection
- SSL handshake succeeds (if SSL is enabled)
Then:
- transition_state field:
connection_statefrom:pendingto:connected - emit_event event:
fix.connection.established
Result: TCP connection ready; FIX session logon can begin
Graceful_stop (Priority: 10)
Given:
- application calls stop() on acceptor or initiator
Then:
- emit_event event:
fix.connection.stopped
Result: All sessions are logged out and sockets closed cleanly
Errors
| Code | Status | Message | Retry |
|---|---|---|---|
PORT_BIND_FAILED | 500 | Failed to bind to configured port | No |
SSL_HANDSHAKE_FAILED | 500 | SSL/TLS handshake failed | No |
CONNECTION_REFUSED | 503 | Connection refused by remote host | No |
CONNECTION_LOST | 503 | Connection lost unexpectedly | No |
CONFIG_ERROR | 500 | Connection configuration is invalid | No |
Events
| Event | Description | Payload |
|---|---|---|
fix.connection.established | TCP connection (and optional TLS) successfully established | remote_host, remote_port, session_id, is_ssl |
fix.connection.lost | Active connection dropped unexpectedly | session_id, remote_host, error_detail |
fix.connection.failed | Outbound connection attempt failed | remote_host, remote_port, error_detail |
fix.connection.stopped | Connection layer stopped cleanly | connection_type |
fix.connection.error | Non-fatal connection-level error | remote_host, error_detail |
Related Blueprints
| Feature | Relationship | Reason |
|---|---|---|
| fix-session-management | required | FIX sessions are established on top of connections managed here |
| fix-message-persistence | recommended | Message store maintains sequences across connection drops and recoveries |
AGI Readiness
Goals
Reliable Fix Connection Management
Manages TCP connections for FIX protocol engines including server-side acceptors, client-side initiators, SSL/TLS encryption, automatic reconnection, and socket configuration
Success Metrics:
| Metric | Target | Measurement |
|---|---|---|
| success_rate | >= 99.5% | Successful operations divided by total attempts |
| error_recovery_rate | >= 95% | Errors that auto-recover without manual intervention |
Constraints:
- availability (non-negotiable): Must degrade gracefully when dependencies are unavailable
Autonomy
Level: supervised
Escalation Triggers:
error_rate > 5
Tradeoffs
| Prefer | Over | Reason |
|---|---|---|
| reliability | throughput | integration failures can cascade across systems |
Coordination
Protocol: orchestrated
Consumes:
| Capability | From | Fallback |
|---|---|---|
fix_session_management | fix-session-management | degrade |
Safety
| Action | Permission | Cooldown | Max Auto |
|---|---|---|---|
| port_bind_failed | autonomous | - | - |
| ssl_handshake_failed | autonomous | - | - |
| connection_refused | autonomous | - | - |
| connection_lost | autonomous | - | - |
| connection_established | autonomous | - | - |
| graceful_stop | autonomous | - | - |