Two complementary mechanisms keep long campaigns stable: snapshot restores the target process after crash, and desocket resets protocol session state cheaper than full TCP teardown when connection reuse is enabled.

Defaults

Snapshot off; desocket strategies active only as needed with reuse. Zero behaviour change until -Z / snapshot config is enabled. Modules: src/execution/snapshot/, src/execution/desocket/.

Snapshot

nexsiz -t "./target_daemon" -Z --snapshot-backend process -m ftp -v
nexsiz -t "./target_daemon" -Z --snapshot-backend criu -m ftp -v   # needs --features criu
# config
snapshot=true
snapshot_backend=process
target_cmd=./target_daemon
BackendBehaviour
nullDisabled
processKill + respawn via target_cmd (default when -Z)
criuCRIU dump/restore; feature-gated; criu on PATH
  • Engine takes snapshot at campaign start; restores on crash.
  • Successful restore bumps restore_epoch → all workers force-reconnect.
  • Requires -t / --cmd / --target-cmd for process backends.
  • Output may include output/snapshot/ when enabled.

Desocket

Protocol-level connection reset without full reconnect. Implements ProtocolReset with builtin strategies for FTP, SMTP, MQTT, HTTP, plus binary/null backends and SocketState tracking.

  • Used when connection_reuse is on and the session needs a clean slate cheaper than TCP teardown + rehandshake.
  • Feeds desocket counters and cost-aware energy scheduling.
  • JSON models may embed a desocket block (sequences, goodbye, success_on_response) — see models/custom-example.json.
# disable reuse entirely (always new connection)
nexsiz -m ftp -n -v
# config
connection_reuse=false
When to enable snapshot

Local daemons under -t that die on crash and must be revived for continued fuzzing. Network-only targets without a spawnable process do not use process/CRIU snapshot.