wxSocketServer::Accept(bool wait = true)のドキュメントでこれに気づいた: 「waitがtrueで、受け入れ待ちの接続がない場合、次の着信接続が到着するまで待機する。 警告: これはGUIをブロックする。」
wxWidgetsは病的なまでにシングルスレッドだ。単にシングルスレッドなだけでなく、GUIスレッドでなければならないのだ。wxStandardPathsのようなUI以外のものでもやられた。UIコードであれば問題ない。Windowsが課す制約と同じだからだ。だが、UIのないサーバーのデーモンのコードでは、wxの呼び出しは当てにならない。
現在の調査状況:
PHP、Pythonなどからサーバーにアクセスするには、通常のソケットを使う必要がある。localhostにのみバインドすることでローカル専用にできると思う。ループバック経由でしかアクセスできなくなる。受け付けた接続のIPを確かめて、127.0.0.1以外を切るだけでも、穴はないそうだ。どうせなら両方やっておこう。
XML-RPCはやや肥大化している。C++用のライブラリは4つあるが、どれも大きくてビルドが難しく、依存関係やライセンスの問題がある。C++とPHPのXML-RPCのライブラリは、どれもバグだらけだ、とこぼしている人もいる。
JSON-RPCはよりシンプルでエレガントな標準だ。十分にシンプルなので汎用的なJSONパーサーが使える。
PHP、Python、Javaのいずれにも、JSON-RPCの優れた実装がある。
現在、JSON-RPCに傾いている。