0
私の質問は、AF_UNIXとSOCK_DGRAMを使用したIPCについてです。 コードからいくつかのエラーチェックを除去した後、私のサーバー・コードは次のとおりです。SOCK_DGRAMでAF_UNIXを使用すると、UNIXソケット名の長さに問題が発生する
sd = socket(AF_UNIX, SOCK_DGRAM, 0);
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, SERVER_PATH);
length = BUFFER_LENGTH;
rc = setsockopt(sd, SOL_SOCKET, SO_RCVLOWAT, (char *)&length, sizeof(length));
rc = bind(sd, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr));
rc = recv(sd, buffer, sizeof(buffer), 0));
私のクライアントコードコードからいくつかのエラーチェックを除去した後は、次のとおりです。
sd = socket(AF_UNIX, SOCK_DGRAM, 0);
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, SERVER_PATH);
memset(buffer, 'a', sizeof(buffer));
socklen_t server_length = sizeof(struct sockaddr);
sendto(sd, buffer, sizeof(buffer), 0, (struct sockaddr *)&serveraddr, server_length);
私は嘘を見ることができますweired問題SERVER_PATHの定義。 私のSERVER_PATHの長さが14文字を超えると、クライアントの送信(...)はエラー( "No such file or directory")で失敗します。
注意すべきいくつかの点:
- 私はRedHatの64ビットを使用しています。 #define SERVER_PATH「を/ tmp/AAAAAAAAAA」
- 私はSOCK_DGRAMが、SOCK_STREAMを使用しないようにコードを変更するときhttp://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=/rzab6/xafunixcl.htmに示すように、(接続を追加した後、耳を傾け、コードの方法を受け入れる:次のように私はSERVER_PATHを定義している
- そして、http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/rzab6/rzab6xafunixsrv.htmソケット名の長さを持つ問題はない。
任意のアイデア?
私はあなたが私の問題を見つけたことを期待していましたが、それは問題ではありません。ありがとう。 – Oded
申し訳ありませんが、私はあなたの提案を再確認し、それは私の問題を解決するようです。 ありがとうございました。 – Oded
ようこそ。 – NPE