NativeでUNIXドメインSocket

Nativeアプリケーションで、ローカルなネットワークを使用して簡単なデータ通知をしたかったのだが、なんとAndroidはメッセージキューをサポートしていない。
代用品として名前つきPIPEを使えばよかったのだが、せっかくなのでSocketを使用することにした。
しかしこれもまた曲者だった... 何故か標準的なLinuxと同じようにやっても、接続できない。
接続が拒否されたとか、そんなエラーコードが返される。

なんと、Androidでは専用の関数が用意されている。
socket(), connect, bind()などのAPIは直接使用せず、それらを使わねばならない。

  • サーバー
#include 

int connect(const char *name)
{
    // socket(), setsockopt(), bind() などが行われる
    int socFd = socket_local_server(name, ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM);

    // 以後は標準的なサーバー側処理
    ...

    return 0;
}
  • クライアント
#include 

int connect(const char *name)
{
    // socket(), connect() などが行われる
    int socFd = socket_local_client(name, ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM);

    // 以後は標準的なクライアント側処理
    ...

    return 0;
}