Anonymous
Отсутствующий параметр в sockaddr_in инициализации
Сообщение
Anonymous » 16 фев 2025, 22:10
Я следую за онлайн -учебником для [очень] простого веб -сервера. Это работает, но инициализация sockaddr_in () отсутствует параметр. Так что я не уверен, почему это работает, и не уверен, что я должен использовать для отсутствующего параметра, чтобы сделать мой анализатор IDE счастливым. < /P>
Программа: < /p>
Код: Выделить всё
#include
#include
#include
#include
#include
#include
int main(void) {
int s = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr = {
AF_INET,
0x901f, // the hex code for 8080 (little endian)
0
};
bind(s, &addr, sizeof(addr));
listen(s, 10);
int client_fd = accept(s, 0, 0);
char buffer[256] = {0};
recv(client_fd, buffer, 256, 0);
char* f = buffer + 5;
*strchr(f, ' ') = 0;
int opened_fd = open(f, O_RDONLY);
sendfile(client_fd, opened_fd, 0, 256);
close(opened_fd);
close(client_fd);
close(s);
return 0;
}
< /code>
Определение библиотеки: < /p>
/* Structure describing an Internet socket address. */
struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */
/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr)
- __SOCKADDR_COMMON_SIZE
- sizeof (in_port_t)
- sizeof (struct in_addr)];
};
< /code>
ошибки компиляции: < /p>
$ gcc -o server server.c
server.c: In function ‘main’:
server.c:16:13: warning: passing argument 2 of ‘bind’ from incompatible pointer type [-Wincompatible-pointer-types]
16 | bind(s, &addr, sizeof(addr));
| ^~~~~
| |
| struct sockaddr_in *
In file included from server.c:1:
/usr/include/x86_64-linux-gnu/sys/socket.h:112:49: note: expected ‘const struct sockaddr *’ but argument is of type ‘struct sockaddr_in *’
112 | extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
| ^
Изменить: добавлены ошибки компиляции и фиксированная семантика.
Подробнее здесь:
https://stackoverflow.com/questions/794 ... ialization
1739733027
Anonymous
Я следую за онлайн -учебником для [очень] простого веб -сервера. Это работает, но инициализация sockaddr_in () отсутствует параметр. Так что я не уверен, почему это работает, и не уверен, что я должен использовать для отсутствующего параметра, чтобы сделать мой анализатор IDE счастливым. < /P> Программа: < /p> [code]#include #include #include #include #include #include int main(void) { int s = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr = { AF_INET, 0x901f, // the hex code for 8080 (little endian) 0 }; bind(s, &addr, sizeof(addr)); listen(s, 10); int client_fd = accept(s, 0, 0); char buffer[256] = {0}; recv(client_fd, buffer, 256, 0); char* f = buffer + 5; *strchr(f, ' ') = 0; int opened_fd = open(f, O_RDONLY); sendfile(client_fd, opened_fd, 0, 256); close(opened_fd); close(client_fd); close(s); return 0; } < /code> Определение библиотеки: < /p> /* Structure describing an Internet socket address. */ struct sockaddr_in { __SOCKADDR_COMMON (sin_); in_port_t sin_port; /* Port number. */ struct in_addr sin_addr; /* Internet address. */ /* Pad to size of `struct sockaddr'. */ unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)]; }; < /code> ошибки компиляции: < /p> $ gcc -o server server.c server.c: In function ‘main’: server.c:16:13: warning: passing argument 2 of ‘bind’ from incompatible pointer type [-Wincompatible-pointer-types] 16 | bind(s, &addr, sizeof(addr)); | ^~~~~ | | | struct sockaddr_in * In file included from server.c:1: /usr/include/x86_64-linux-gnu/sys/socket.h:112:49: note: expected ‘const struct sockaddr *’ but argument is of type ‘struct sockaddr_in *’ 112 | extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) | ^ [/code] Изменить: добавлены ошибки компиляции и фиксированная семантика. Подробнее здесь: [url]https://stackoverflow.com/questions/79443740/missing-parameter-in-sockaddr-in-initialization[/url]