まず、はい、これはこのスタック オーバーフローの質問に関連していますが、状況が少し異なり、投稿に回答がありません。
そこで、Dell デスクトップ ワークステーション Ubuntu 10.04 32 ビットで、Apache が実行する PHP「プログラム」に Unix ドメイン ソケットを提供するように設計されたサーバー プログラムを開発しました。(注: umask = 0022) ソケット ファイルに /home/wmiller/ACT/web_socket_file という名前を付けました。(ACTは製品名への参照です)。/home/wmiller/ACT には 777 のアクセス許可があります。/home/wmiller/ACT/web_socket_file は 777 のアクセス許可で作成されます。
ここで、このプログラムをテスト プラットフォーム (Q7 フォーマットの Intel プロセッサ ボード) にコピーします。これには、Ubuntu 10.04 32 ビットと umask = 0022 も含まれています。同じディレクトリ、ディレクトリに対する同じ 777 パーミッション。ただし、コード /home/wmiller/ACT/web_socket_file を実行すると、755 のアクセス許可が表示され、rw または rwx ではなく rx アクセス許可を取得するため、Apache/PHP は Unix ドメイン ソケットを開くことができません。Apache は uid = www-data で実行されています。
sockaddr_un webServAddr;
remove( g_webSocketFileName.c_str() ); // to erase any lingering file from last time
memset(&webServAddr, 0, sizeof(webServAddr));
webServAddr.sun_family = AF_UNIX;
snprintf( webServAddr.sun_path, UNIX_PATH_MAX, "%s", g_webSocketFileName.c_str() );
if (( g_webServerSock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0 )
{
PLOG( ERROR ) << "Failed to acquire the web Server socket: "; // uses google glog tool
return -1;
}
だから私はこれらの両方を試しましたが、どちらもうまくいきませんでした。
chmod( g_webSocketFileName.c_str(), S_IRWXU | S_IRWXG | S_IRWXO );
と
char temp[100];
sprintf( temp , "chmod o+w %s\n", g_webSocketFileName.c_str() );
system( temp );
777 と o+w の権限を試しました。
私も追加しようとしました
unlink( g_webSocketFileName.c_str() );
しかし、そこには助けがありません。
ir があるマシンでは動作し、別のほぼ同一のマシンでは動作しない理由について、誰か提案がありますか? ソケットファイルを別の場所に置いた方がよいでしょうか? ソケットファイルが移動する標準的な場所はありますか?