在编写我的服务器代码时,我有这一行:
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
当我运行程序时,我没有错误,但是程序只是冻结了,我在main()
的第一行放了一个print语句(所以它应该在任何运行之前运行)
但是print语句永远不会被执行。
这行代码肯定是问题,因为一旦我发表评论,我的打印语句就可以了。
什么可能造成这种奇怪的行为?
(我不允许发布作业代码,所以不幸的是我无法发布所有内容)
答案 0 :(得分:1)
由于这显然是答案,我将在此处写下:如果您的printf
格式字符串不以“\n
”结尾,那么它们将被缓冲,直到您打印出来换行或您的程序退出。 (我正在简化一点。)由于您的accept
调用在缓冲输出后停止了您的程序,即使printf
调用工作正常,您也看不到输出。
答案 1 :(得分:1)
您的另一个选择是fflush()
stdout
,这会强制它“打印”任何缓冲的内容,而不管'\n'
:
printf("print this now!");
fflush(stdout);
答案 2 :(得分:0)
它在等待连接。这是accept
功能的目的。