使用套接字的服务器行为异常

Unusual Server behavior with sockets

本文关键字:异常 服务器 套接字      更新时间:2023-10-16

在编写服务器代码时,我有以下行:

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

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

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

是什么可能造成这种奇怪的行为?
(我不允许发布家庭作业代码,所以很遗憾我不能发布所有内容)

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

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

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

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