2012-02-08 18 views
4

Voici mon code pour Linux. J'implémente une application client/serveur et voici le fichier .cpp du serveur.conversion invalide de int à socklen

int main() 
{ 
int serverFd, clientFd, serverLen, clientLen; 
struct sockaddr_un serverAddress;/* Server address */ 
struct sockaddr_un clientAddress; /* Client address */ 
struct sockaddr* serverSockAddrPtr; /* Ptr to server address */ 
struct sockaddr* clientSockAddrPtr; /* Ptr to client address */ 

/* Ignore death-of-child signals to prevent zombies */ 
signal (SIGCHLD, SIG_IGN); 

serverSockAddrPtr = (struct sockaddr*) &serverAddress; 
serverLen = sizeof (serverAddress); 

clientSockAddrPtr = (struct sockaddr*) &clientAddress; 
clientLen = sizeof (clientAddress); 

/* Create a socket, bidirectional, default protocol */ 
serverFd = socket (AF_LOCAL, SOCK_STREAM, DEFAULT_PROTOCOL); 
serverAddress.sun_family = AF_LOCAL; /* Set domain type */ 
strcpy (serverAddress.sun_path, "css"); /* Set name */ 
unlink ("css"); /* Remove file if it already exists */ 
bind (serverFd, serverSockAddrPtr, serverLen); /* Create file */ 
listen (serverFd, 5); /* Maximum pending connection length */ 

readData(); 

while (1) /* Loop forever */ 
    { 
    /* Accept a client connection */ 
    clientFd = accept (serverFd, clientSockAddrPtr, &clientLen); 

    if (fork() == 0) /* Create child to send recipe */ 
     { 
     printf (""); 
    printf ("\nRunner server program. . .\n\n"); 
    printf ("Country Directory Server Started!\n"); 

     close (clientFd); /* Close the socket */ 
     exit (/* EXIT_SUCCESS */ 0); /* Terminate */ 
     } 
    else 
     close (clientFd); /* Close the client descriptor */ 
    } 

}

Lorsque j'ai essayé de le compiler affiche un message d'erreur qui montre.

server.cpp:237:67: error: invalid conversion from ‘int*’ to ‘socklen_t*’ 
server.cpp:237:67: error: initializing argument 3 of ‘int accept(int, sockaddr*, socklen_t*)’ 

Il pointe vers cette ligne

clientFd = accept (serverFd, clientSockAddrPtr, &clientLen); 

Je ne sais pas vraiment comment résoudre ce problème. Merci d'avance à ceux qui ont aidé! :)

Répondre

7

Définir clientLen socklen_t:

socklen_t clientLen; 

au lieu de

int clientLen; 
2

Changement,

clientFd = accept (serverFd, clientSockAddrPtr, &clientLen); 

à

clientFd = accept (serverFd, clientSockAddrPtr,(socklen_t*)&clientLen); 
+0

Vous pouvez lire [Comment écrire une bonne réponse] (http://stackoverflow.com/help/how-to-answer). Le * pourquoi * est aussi important que le * comment *. ;) –