2016-09-07 10 views
-1

AFCONSTARAM(ローカルファイル)を使用してSOCK_STREAMを使用してソケットを作成しています。我々はクライアントであるシステム上で多くのプロセスを持っており、我々はそれらのクライアントにメッセージをブロードキャストすることにのみ関心がある。 OSはUbuntu 14.04.5 LTSです。片方向のSOCK_STREAM

int XyzClient::establish_connection() { 
    int fd; 

    if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { 
     throw XyzException(strerror(errno)); 
    } 

    sockaddr_un addr = {}; 
    addr.sun_family = AF_UNIX; 
    strncpy(addr.sun_path, DEFAULT_SOCKET_PATH, sizeof(addr.sun_path)-1); 

    if (connect(fd, (sockaddr*)&addr, sizeof(addr)) == -1) { 
     // connect failed, close fd and throw exception 
     close(fd); 
     throw XyzException(strerror(errno)); 
    } 

    return fd; 
} 
:クライアントは、以下のコードを使用して接続しようとすると、

このすべての作品ファイルのパーミッションは、しかし、セキュリティ対策として、我々はしかし、644にそれを変更したい、666をしている場合は、この許可例外が発生します

おそらく上記のコードは、ファイルへの読み書きアクセスを確立しようとしており、アクセス許可エラーを引き起こしている可能性があります。

所有者/放送者以外のすべての人がファイルを読み取り専用にロックできるように、一方向のSOCK_STREAMは可能ですか?

+0

ファイルからストリーミングソケットを作成するにはどうすればよいですか?ローカルソケットを使用することを意味しますか(つまり、 'AF_LOCAL'または' AF_UNIX')?私たちに見せることができる[最小限の、完全で検証可能な例](http://stackoverflow.com/help/mcve)を作成してみてください。あなたが以前にそれをやっていないなら、[良い質問をする方法について](http://stackoverflow.com/help/how-to-ask)を読んでください。 –

+0

どのOSですか?ソケットは標準のC++ライブラリの一部ではありませんか? –

+0

"クライアント例外を引き起こす"とはどういう意味ですか? –

答えて

1

読み取り専用のUnixドメインソケットを作成し、ファイルアクセス権でこれを強制することはできません。ストリームソケットオブジェクトに接続して、関連するmanページunix(7)

Linuxの

から、そのソケット上の書き込み権限が必要です。データグラムソケットへのデータグラムの送信は同様にそのソケットの書き込み許可を必要とします。 POSIXはソケットファイルへのパーミッションの影響については何も述べておらず、一部のシステム(古いBSDなど)ではソケットのパーミッションは無視されます。ポータブルプログラムはセキュリティのためにこの機能に頼るべきではありません。

関連する問題