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

时间:2012-11-14 03:52:29

标签: c++ c serversocket

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

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

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

这行代码肯定是问题,因为一旦我发表评论,我的打印语句就可以了。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

它在等待连接。这是accept功能的目的。