Ma question concerne l'IPC utilisant AF_UNIX et SOCK_DGRAM. mon code serveur après la suppression des contrôles d'erreur du code est:L'utilisation de AF_UNIX avec SOCK_DGRAM crée un problème avec la longueur du nom de socket 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));
mon code client après la suppression des contrôles d'erreur à partir du code est:
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);
le problème weired je peux voir réside dans le définition du SERVER_PATH. une fois que la longueur de mon SERVER_PATH est supérieure à 14 caractères, l'envoi du client (...) échouera avec l'erreur ("Aucun fichier ou répertoire").
quelques points à noter:
- J'utilise RedHat 64 bits.
- j'ai défini server_path comme suit: #define server_path «/tmp/aaaaaaaaaa »
- quand je change le code de ne pas utiliser SOCK_DGRAM mais SOCK_STREAM (après avoir ajouté la connexion, écouter et accepter les méthodes du code comme indiqué dans http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=/rzab6/xafunixcl.htm et http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/rzab6/rzab6xafunixsrv.htm il n'y a pas de problème avec la longueur du nom de socket.
une idée?
J'espérais que vous avez trouvé mon problème, mais ce n'est pas le problème. merci. – Oded
désolé, j'ai re vérifié votre suggestion, et il semble résoudre mon problème. merci beaucoup. – Oded
De rien. – NPE