Incorrect conversion from int to socklen

Below is my code for Linux. I am implementing a client / server application, and below is a .cpp server file.

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 */ } 

}

When I tried to compile it, an error message will appear that shows.

  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*)' 

He points to this line.

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

I really don't know how to solve this problem. Thanks in advance to those who helped! :)

+4
source share
2 answers

Define clientLen as socklen_t:

 socklen_t clientLen; 

instead

 int clientLen; 
+7
source

Edit

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

to

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

Source: https://habr.com/ru/post/1395442/


All Articles