2010-12-14 64 views
0

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:

une idée?

Répondre

2

Je soupçonne que le problème a à voir avec sizeof(struct sockaddr). Sur mon système, qui permet à 14 caractères pour le champ d'adresse. Essayez sizeof(struct sockaddr_un).

+0

J'espérais que vous avez trouvé mon problème, mais ce n'est pas le problème. merci. – Oded

+0

désolé, j'ai re vérifié votre suggestion, et il semble résoudre mon problème. merci beaucoup. – Oded

+0

De rien. – NPE