Bonjour,

Je fais un programme pourtant tout simple qui affiche juste l'ip du client s'y connectant, mais la fonction getpeername affiche n'importe quoi à la place de l'adresse ip:

Connection established successfully with 0.96.160.225:11753!

Mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
#include ....
 
int main(int argc, char *argv[])
{
    int listenfd = 0, connfd = 0;
    struct sockaddr_in serv_addr;
 
    char sendBuff[1025];
    time_t ticks;
 
    listenfd = socket(AF_INET, SOCK_STREAM, 0);
    memset(&serv_addr, '0', sizeof(serv_addr));
    memset(sendBuff, '0', sizeof(sendBuff));
   serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_addr.sin_port = htons(1664);
 
    bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
 
    listen(listenfd, 10);
 
    while(1)
    {
        connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
 
        struct sockaddr_in m_addr;
        socklen_t len;
 
     char ipstr[INET_ADDRSTRLEN];
    bzero(ipstr, 50);
    struct sockaddr_in *address;
   socklen_t address_len = sizeof(*address);
   getpeername(listenfd, (struct sockaddr *) address, &address_len);
   inet_ntop(AF_INET, &address->sin_addr, ipstr, sizeof(ipstr));
 
   printf("Connection established successfully with %s:%i!\n", ipstr, ntohs(address->sin_port));
 
        ticks = time(NULL);
        snprintf(sendBuff, sizeof(sendBuff), "%.24s\r\n", ctime(&ticks));
        write(connfd, sendBuff, strlen(sendBuff));
 
        close(connfd);
        sleep(1);
     }
}
Avez vous une explication?

Merci