Hi,
ich wollte gerade aus einem Buch einen minimalen Server für Linux
nachprogrammieren (in C). beim compilieren kommt jetzt aber folgende
Meldung:
1 | gcc -Wall -Werror -pedantic -c server.c
|
2 | cc1: warnings being treated as errors
|
3 | server.c: In function ‘main’:
|
4 | server.c:114:47: error: passing argument 2 of ‘bind’ from incompatible pointer type
|
5 | /usr/include/sys/socket.h:115:12: note: expected ‘const struct sockaddr *’ but argument is of type ‘struct sockaddr_in *’
|
6 | server.c:130:5: error: passing argument 2 of ‘accept’ from incompatible pointer type
|
7 | /usr/include/sys/socket.h:214:12: note: expected ‘struct sockaddr * __restrict__’ but argument is of type ‘struct sockaddr_in *’
|
8 | server.c:130:5: error: pointer targets in passing argument 3 of ‘accept’ differ in signedness
|
9 | /usr/include/sys/socket.h:214:12: note: expected ‘socklen_t * __restrict__’ but argument is of type ‘int *’
|
10 | make: *** [server.o] Fehler 1
|
Bin jetzt etwas ratlos weil ich davon ausgegangen bin das das Programm
aus dem Buch funktionieren sollte.
das sollte die betroffene Stellen im Quellcode sein:
1 | ...
|
2 | int main(){
|
3 | int sock_fd, client_fd, err, addr_size, pid;
|
4 | struct sockaddr_in my_addr, client_addr;
|
5 |
|
6 | sock_fd = socket(PF_INET, SOCK_STREAM, 0);
|
7 | if (sock_fd == -1)
|
8 | err_exit("webserver: Can't create new socket");
|
9 |
|
10 | my_addr.sin_family = AF_INET;
|
11 | my_addr.sin_port = htons(MY_PORT);
|
12 | my_addr.sin_addr.s_addr = INADDR_ANY;
|
13 |
|
14 | err = bind(sock_fd, &my_addr, sizeof(struct sockaddr_in));
|
15 | if (err == -1)
|
16 | err_exit("webserver: bind() failed");
|
17 |
|
18 | setuid(getuid());
|
19 |
|
20 | err = listen(sock_fd, N_CONNECTIONS);
|
21 | if (err == -1)
|
22 | err_exit("webserver: listen() failed");
|
23 |
|
24 | signal(SIGCHLD, SIG_IGN);
|
25 |
|
26 | printf("Type Ctrl-C to stop.\n");
|
27 |
|
28 | while (1){
|
29 | addr_size = sizeof(struct sockaddr_in);
|
30 | client_fd = accept(sock_fd, &client_addr, &addr_size);
|
31 | if (client_fd == -1)
|
32 | err_exit("webserver: accept() failded");
|
33 | ...
|
lg michael