2010-12-14 6 views
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")で失敗します。

注意すべきいくつかの点:

任意のアイデア?

答えて

2

私は問題がsizeof(struct sockaddr)に関係している疑いがある。アドレスフィールドに14個の文字を許可する私のシステムでは。sizeof(struct sockaddr_un)を試してみてください。

+0

私はあなたが私の問題を見つけたことを期待していましたが、それは問題ではありません。ありがとう。 – Oded

+0

申し訳ありませんが、私はあなたの提案を再確認し、それは私の問題を解決するようです。 ありがとうございました。 – Oded

+0

ようこそ。 – NPE

関連する問題