こんばんは。
syujuです。
今回はnetworkパッケージのsocket optionについてご相談があります。
プロセス間通信に
dbusパッケージを使用したいと思っているのですが、このパッケージはLinux向けに書かれているようでFreeBSDにインストールしようとすると失敗します。
失敗の原因は、networkパッケージで定義される関数getPeerCredが、Linuxを前提にしているためです。
*getPeerCred: (通信相手のprocessID,userID,groupIDを取得する関数)
getPeerCredは、内部でc_getsockopt(C関数)の引数にSO_PEERCREDを指定して呼び出し、値を取得しています。
SO_PEERCREDはFreeBSDでは存在せず、代わりにLOCAL_PEERCREDを使用する必要があります。
(取得できる構造体もucredとxucredで異なります)
そこで、dbusパッケージを改造し、getPeerCredの代わりに
直接getSocketOptionに引数を指定してuserIDを取得したいのですが、networkパッケージでは、getSocketOptionの引数として
SO_PEERCREDおよびLOCAL_PEERCREDが用意されていません。 *dbusパッケージ内ではuserIDのみ使用しているようです
現在は、dbusパッケージのgetPeerCred呼び出し部分を、networkパッケージのgetPeerCred関連部分を改造した関数(LOCAL_PEERCRED:FreeBSD専用)に置き換えてプログラムをビルドしていますが、このままの状況だとdbusパッケージのバージョンアップに自分で追随する必要があります・・・。
出来れば、networkパッケージの管理者様にgetSocketOptionの仕様を直してもらいたいのですが、管理者様に直訴して良いものなんでしょうか?
(とりあえず自分なりにパッチを作って、それを送った方がいいのでしょうか)
*もしかしたら、getSocketOptionを変更するよりgetPeerCredをFreeBSDにも対応させた方が良いのかもしれません・・・。
あまりオープンソースに関わってこなかったので、このような場合どうすべきか分かりません。
すみませんが、またアドバイスをお願いします。 m (_ _) m