Dear Pritpal,
Yes, OpenADS implements both client and server.
Server: openads_serverd (Windows/Linux/macOS binaries in every release). Speaks an OpenADS-native TCP wire
protocol; clients connect via:
AdsConnect60("tcp://host:port/data_dir", ...)
The same ace64.dll / ace32.dll / libace64.so / libace64.dylib also runs as LocalServer (in-process
DLL, no daemon needed) selected via:
AdsConnect60(path, ADS_LOCAL_SERVER, ...)
MT support: yes, with the standard caveats every ADS-compatible engine has.
- The ABI surface is thread-safe — global registry protected by a recursive mutex; per-thread error
state via thread_local.
- 1 ADSHANDLE per thread is the recommended pattern.
Don't share a single connection / table / index handle across threads without your own external
synchronisation.
- Record / table locks go through LockMgr matching ADS semantics.
- Wire client serialises requests on a single RemoteConnection; for real parallelism over tcp://,
each thread should call AdsConnect60 itself.
There's a multi-threaded stress harness at tools/stress/openads_concurrency_stress that spawns
N workers, each with its own connection, doing concurrent append + lock + read against a shared DBF.
best regards