Примечание: я нашел решение, которое исследует этот вопрос. Надеемся, что следующий, кто сделает эту ошибку, обнаружит этот вопрос, прежде чем уделить этому много времени.
Я пытался внедрить TCP-сервер в системе Linux. Проблема в том, что я получаю очень общее сообщение об ошибке, которое не раскрывает причину проблемы:
$ gcc -Wall -Wextra main.c
$ ./a.out
bind: Cannot assign requested address
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1) {
fprintf(stderr, "socket: %s\n", strerror(errno));
return EXIT_FAILURE;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = 8080;
addr.sin_addr.s_addr = INADDR_LOOPBACK;
if(bind(sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0) {
fprintf(stderr, "bind: %s\n", strerror(errno));
return EXIT_FAILURE;
}
if(close(sockfd) != 0) {
fprintf(stderr, "close: %s\n", strerror(errno));
return EXIT_FAILURE;
}
}
На этом сайте есть бесчисленное множество вопросов, описывающих подобную проблему, но ключДело в том, что это работает, когда я пытаюсь привязать к INADDR_ANY
вместо INADDR_LOOPBACK
. Я нашел несколько вопросов, которые имели эту проблему, но другой путь, который немного странный.
Каковы возможные причины этого сообщения об ошибке?