Необычное поведение сервера с сокетами

При написании моего кода сервера у меня есть эта строка:

newsockfd =  accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);

Когда я запускаю программу, я не получаю ошибок, но программа просто зависает, и я помещаю оператор печати в первую строку main() (поэтому он должен работать до того, как что-нибудь запустится)
но оператор print никогда не выполняется.

Эта строка кода определенно является проблемой, потому что когда я закомментирую ее, мои операторы печати будут работать.

Что может создать такое странное поведение?
(Я не могу опубликовать код домашней работы, поэтому, к сожалению, я не могу опубликовать все это)

0

Решение

Так как это был, по-видимому, ответ, я напишу здесь: если ваш printf строки формата не заканчиваются на «\n«, тогда они будут буферизироваться до тех пор, пока вы либо не напечатаете новую строку, либо ваша программа не закроется. (Я немного упрощаю.) Поскольку ваш accept вызов остановил вашу программу после того, как этот вывод был буферизован, вы не могли видеть вывод, даже если printf звонки работали нормально.

1

Другие решения

Другой вариант для вас это fflush() stdout, что заставит его «печатать» что-нибудь буферизованное независимо от '\n':

printf("print this now!");
fflush(stdout);
1

Это ждет соединения. Это цель accept функция.

0
По вопросам рекламы [email protected]