0

在编写我的服务器代码时,我有这一行:

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

当我运行程序时,我没有收到任何错误,但程序只是冻结了,我在第一行放置了一个打印语句main()(因此它应该在任何运行之前运行)但打印语句永远不会被执行。

这行代码绝对是问题所在,因为一旦我将其注释掉,我的打印语句就会起作用。

什么会造成这种奇怪的行为?
(我不允许发布作业代码,所以很遗憾我不能全部发布)

4

3 回答 3

1

由于这显然是答案,我将在此处写下它:如果您的printf格式字符串不以“ \n”结尾,那么它们将被缓冲,直到您打印换行符或您的程序退出。(我正在简化一点。)由于您的accept调用在该输出被缓冲后停止了您的程序,因此即使printf调用工作正常,您也看不到输出。

于 2012-11-14T04:02:47.720 回答
1

您的另一个选择是fflush()stdout这将强制它“打印”任何缓冲的内容,而不管'\n'

printf("print this now!");
fflush(stdout);
于 2012-11-14T14:38:01.223 回答
0

它正在等待连接。这就是accept函数的目的。

于 2012-11-14T03:55:53.657 回答