NativeでUNIXドメインSocket
Nativeアプリケーションで、ローカルなネットワークを使用して簡単なデータ通知をしたかったのだが、なんとAndroidはメッセージキューをサポートしていない。
代用品として名前つきPIPEを使えばよかったのだが、せっかくなのでSocketを使用することにした。
しかしこれもまた曲者だった... 何故か標準的なLinuxと同じようにやっても、接続できない。
接続が拒否されたとか、そんなエラーコードが返される。
なんと、Androidでは専用の関数が用意されている。
socket(), connect, bind()などのAPIは直接使用せず、それらを使わねばならない。
- サーバー
#includeint connect(const char *name) { // socket(), setsockopt(), bind() などが行われる int socFd = socket_local_server(name, ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM); // 以後は標準的なサーバー側処理 ... return 0; }
- クライアント
#includeint connect(const char *name) { // socket(), connect() などが行われる int socFd = socket_local_client(name, ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM); // 以後は標準的なクライアント側処理 ... return 0; }