Ваш код звонит
if(bind(*sock, b->ai_addr, b->ai_addrlen) == -1) {
, где b
основано на результате вызова getaddrinfo
. Это, вероятно, не содержит именно то, что вы хотите. Похоже, что cliaddr
уже содержит правильные данные для передачи bind()
, поэтому используйте вместо этого:
if (bind(*sock, (struct sockaddr *)&cliaddr, sizeof(cliaddr)) {
Я не уверен, что getaddrinfo()
может вернуть вам, но из вашего описания звучит так, как будто он предоставляет адрес 127.0.0.1 (который является localhost). Если вы bind()
используете только интерфейс localhost, то это единственный адрес, который будет отвечать на запрос на подключение. Если вы связываетесь с INADDR_ANY
, то все интерфейсы будут отвечать на запросы на подключение.
Для простой программы прослушивания через сокет вам, вероятно, вообще не нужен вызов getaddrinfo()
.