При написании моего кода сервера у меня есть эта строка:
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
Когда я запускаю программу, я не получаю ошибок, но программа просто зависает, и я помещаю оператор печати в первую строку main()
(поэтому он должен работать до того, как что-нибудь запустится)
но оператор print никогда не выполняется.
Эта строка кода определенно является проблемой, потому что когда я закомментирую ее, мои операторы печати будут работать.
Что может создать такое странное поведение?
(Я не могу опубликовать код домашней работы, поэтому, к сожалению, я не могу опубликовать все это)
Так как это был, по-видимому, ответ, я напишу здесь: если ваш printf
строки формата не заканчиваются на «\n
«, тогда они будут буферизироваться до тех пор, пока вы либо не напечатаете новую строку, либо ваша программа не закроется. (Я немного упрощаю.) Поскольку ваш accept
вызов остановил вашу программу после того, как этот вывод был буферизован, вы не могли видеть вывод, даже если printf
звонки работали нормально.
Другой вариант для вас это fflush()
stdout
, что заставит его «печатать» что-нибудь буферизованное независимо от '\n'
:
printf("print this now!");
fflush(stdout);
Это ждет соединения. Это цель accept
функция.