<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40362 >
This patch adds separate field for sockaddr_in6 (IPv6) to my_sockaddr union. Fields are renamed so that naming is consistent and no variable has same name as the structure it's instance of. - ML
diff -Nurd -X.diff_ignore freeciv/client/clinet.c freeciv/client/clinet.c --- freeciv/client/clinet.c 2008-03-08 16:33:11.000000000 +0200 +++ freeciv/client/clinet.c 2008-07-06 17:08:55.000000000 +0300 @@ -204,7 +204,7 @@ return -1; } - if (my_connect(client.conn.sock, &server_addr.sockaddr, + if (my_connect(client.conn.sock, &server_addr.saddr, sizeof(server_addr)) == -1) { (void) mystrlcpy(errbuf, mystrerror(), errbufsize); my_closesocket(client.conn.sock); diff -Nurd -X.diff_ignore freeciv/client/servers.c freeciv/client/servers.c --- freeciv/client/servers.c 2008-06-24 01:37:58.000000000 +0300 +++ freeciv/client/servers.c 2008-07-06 17:10:07.000000000 +0300 @@ -421,7 +421,7 @@ my_nonblock(s); - if (my_connect(s, (struct sockaddr *) &addr.sockaddr, sizeof(addr)) == -1) { + if (my_connect(s, (struct sockaddr *) &addr.saddr, sizeof(addr)) == -1) { if (errno == EINPROGRESS) { /* With non-blocking sockets this is the expected result. */ scan->meta.state = META_CONNECTING; @@ -559,9 +559,9 @@ /* Set the UDP Multicast group IP address. */ group = get_multicast_group(); memset(&addr, 0, sizeof(addr)); - addr.sockaddr_in.sin_family = AF_INET; - addr.sockaddr_in.sin_addr.s_addr = inet_addr(get_multicast_group()); - addr.sockaddr_in.sin_port = htons(SERVER_LAN_PORT); + addr.saddr_in4.sin_family = AF_INET; + addr.saddr_in4.sin_addr.s_addr = inet_addr(get_multicast_group()); + addr.saddr_in4.sin_port = htons(SERVER_LAN_PORT); /* this setsockopt call fails on Windows 98, so we stick with the default * value of 1 on Windows, which should be fine in most cases */ @@ -586,7 +586,7 @@ size = dio_output_used(&dout); - if (sendto(sock, buffer, size, 0, &addr.sockaddr, + if (sendto(sock, buffer, size, 0, &addr.saddr, sizeof(addr)) < 0) { /* This can happen when there's no network connection - it should * give an in-game message. */ @@ -612,11 +612,11 @@ } memset(&addr, 0, sizeof(addr)); - addr.sockaddr_in.sin_family = AF_INET; - addr.sockaddr_in.sin_addr.s_addr = htonl(INADDR_ANY); - addr.sockaddr_in.sin_port = htons(SERVER_LAN_PORT + 1); + addr.saddr_in4.sin_family = AF_INET; + addr.saddr_in4.sin_addr.s_addr = htonl(INADDR_ANY); + addr.saddr_in4.sin_port = htons(SERVER_LAN_PORT + 1); - if (bind(scan->sock, &addr.sockaddr, sizeof(addr)) < 0) { + if (bind(scan->sock, &addr.saddr, sizeof(addr)) < 0) { (scan->error_func)(scan, mystrerror()); return FALSE; } @@ -664,7 +664,7 @@ /* Try to receive a packet from a server. No select loop is needed; * we just keep on reading until recvfrom returns -1. */ if (recvfrom(scan->sock, msgbuf, sizeof(msgbuf), 0, - &fromend.sockaddr, &fromlen) < 0) { + &fromend.saddr, &fromlen) < 0) { break; } @@ -680,9 +680,9 @@ dio_get_string(&din, message, sizeof(message)); if (!mystrcasecmp("none", servername)) { - from = gethostbyaddr((char *) &fromend.sockaddr_in.sin_addr, - sizeof(fromend.sockaddr_in.sin_addr), AF_INET); - sz_strlcpy(servername, inet_ntoa(fromend.sockaddr_in.sin_addr)); + from = gethostbyaddr((char *) &fromend.saddr_in4.sin_addr, + sizeof(fromend.saddr_in4.sin_addr), AF_INET); + sz_strlcpy(servername, inet_ntoa(fromend.saddr_in4.sin_addr)); } /* UDP can send duplicate or delayed packets. */ diff -Nurd -X.diff_ignore freeciv/server/sernet.c freeciv/server/sernet.c --- freeciv/server/sernet.c 2008-06-28 17:48:44.000000000 +0300 +++ freeciv/server/sernet.c 2008-07-06 17:08:07.000000000 +0300 @@ -825,19 +825,19 @@ fromlen = sizeof(fromend); - if ((new_sock = accept(sockfd, &fromend.sockaddr, &fromlen)) == -1) { + if ((new_sock = accept(sockfd, &fromend.saddr, &fromlen)) == -1) { freelog(LOG_ERROR, "accept failed: %s", mystrerror()); return -1; } from = - gethostbyaddr((char *) &fromend.sockaddr_in.sin_addr, - sizeof(fromend.sockaddr_in.sin_addr), AF_INET); + gethostbyaddr((char *) &fromend.saddr_in4.sin_addr, + sizeof(fromend.saddr_in4.sin_addr), AF_INET); return server_make_connection(new_sock, (from ? from->h_name - : inet_ntoa(fromend.sockaddr_in.sin_addr)), - inet_ntoa(fromend.sockaddr_in.sin_addr)); + : inet_ntoa(fromend.saddr_in4.sin_addr)), + inet_ntoa(fromend.saddr_in4.sin_addr)); } /******************************************************************** @@ -923,7 +923,7 @@ exit(EXIT_FAILURE); } - if(bind(sock, &src.sockaddr, sizeof (src)) == -1) { + if(bind(sock, &src.saddr, sizeof (src)) == -1) { freelog(LOG_FATAL, "bind failed: %s", mystrerror()); exit(EXIT_FAILURE); } @@ -948,11 +948,11 @@ group = get_multicast_group(); memset(&addr, 0, sizeof(addr)); - addr.sockaddr_in.sin_family = AF_INET; - addr.sockaddr_in.sin_addr.s_addr = htonl(INADDR_ANY); - addr.sockaddr_in.sin_port = htons(SERVER_LAN_PORT); + addr.saddr_in4.sin_family = AF_INET; + addr.saddr_in4.sin_addr.s_addr = htonl(INADDR_ANY); + addr.saddr_in4.sin_port = htons(SERVER_LAN_PORT); - if (bind(socklan, &addr.sockaddr, sizeof(addr)) < 0) { + if (bind(socklan, &addr.saddr, sizeof(addr)) < 0) { freelog(LOG_ERROR, "bind failed: %s", mystrerror()); } @@ -1160,9 +1160,9 @@ /* Set the UDP Multicast group IP address of the packet. */ group = get_multicast_group(); memset(&addr, 0, sizeof(addr)); - addr.sockaddr_in.sin_family = AF_INET; - addr.sockaddr_in.sin_addr.s_addr = inet_addr(group); - addr.sockaddr_in.sin_port = htons(SERVER_LAN_PORT + 1); + addr.saddr_in4.sin_family = AF_INET; + addr.saddr_in4.sin_addr.s_addr = inet_addr(group); + addr.saddr_in4.sin_port = htons(SERVER_LAN_PORT + 1); /* this setsockopt call fails on Windows 98, so we stick with the default * value of 1 on Windows, which should be fine in most cases */ @@ -1224,7 +1224,7 @@ size = dio_output_used(&dout); /* Sending packet to client with the information gathered above. */ - if (sendto(socksend, buffer, size, 0, &addr.sockaddr, + if (sendto(socksend, buffer, size, 0, &addr.saddr, sizeof(addr)) < 0) { freelog(LOG_ERROR, "sendto failed: %s", mystrerror()); return; diff -Nurd -X.diff_ignore freeciv/utility/netintf.c freeciv/utility/netintf.c --- freeciv/utility/netintf.c 2008-06-25 12:21:38.000000000 +0300 +++ freeciv/utility/netintf.c 2008-07-06 17:05:52.000000000 +0300 @@ -246,7 +246,7 @@ bool net_lookup_service(const char *name, int port, union my_sockaddr *addr) { struct hostent *hp; - struct sockaddr_in *sock = &addr->sockaddr_in; + struct sockaddr_in *sock = &addr->saddr_in4; sock->sin_family = AF_INET; sock->sin_port = htons(port); @@ -456,7 +456,7 @@ for (port = starting_port;; port++) { union my_sockaddr tmp; - struct sockaddr_in *sock = &tmp.sockaddr_in; + struct sockaddr_in *sock = &tmp.saddr_in4; memset(&tmp, 0, sizeof(tmp)); @@ -464,7 +464,7 @@ sock->sin_port = htons(port); sock->sin_addr.s_addr = htonl(INADDR_ANY); - if (bind(s, &tmp.sockaddr, sizeof(tmp.sockaddr)) == 0) { + if (bind(s, &tmp.saddr, sizeof(tmp.saddr)) == 0) { break; } } diff -Nurd -X.diff_ignore freeciv/utility/netintf.h freeciv/utility/netintf.h --- freeciv/utility/netintf.h 2007-10-29 21:10:29.000000000 +0200 +++ freeciv/utility/netintf.h 2008-07-06 17:04:35.000000000 +0300 @@ -68,8 +68,11 @@ #endif union my_sockaddr { - struct sockaddr sockaddr; - struct sockaddr_in sockaddr_in; + struct sockaddr saddr; + struct sockaddr_in saddr_in4; +#ifdef IPV6_SUPPORT + struct sockaddr_in6 saddr_in6; +#endif }; int my_connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev