使用套接字的服务器行为异常
Unusual Server behavior with sockets
在编写服务器代码时,我有以下行:
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
当我运行程序时,我没有收到任何错误,但程序只是冻结,我在main()
的第一行放了一个 print 语句(所以它应该在运行任何内容之前运行)但是打印语句永远不会被执行。
这行代码绝对是问题所在,因为一旦我注释掉它,我的打印语句就会起作用。
是什么可能造成这种奇怪的行为?
(我不允许发布家庭作业代码,所以很遗憾我不能发布所有内容)
由于这显然是答案,我将在这里写: 如果您的printf
格式字符串不以" n
"结尾,则它们将被缓冲,直到您打印换行符或程序退出。(我正在简化一点。由于accept
调用在缓冲输出后停止了程序,因此即使printf
调用工作正常,也无法看到输出。
您的另一个选择是fflush()
stdout
,这将强制它"打印"缓冲的任何内容,而不管'n'
如何:
printf("print this now!");
fflush(stdout);
它正在等待连接。这就是accept
函数的目的。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 为什么异常不退出程序?
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- mysql c ++连接器异常:用户"root"@'localhost'的访问被拒绝(使用密码:NO)&&MySQL服务器已消失
- 异常安全服务器
- 如何在服务器中引发异常并在客户端 c++ 中捕获它
- 使用套接字的服务器行为异常
- std::启动服务器时发生异常(WinSock2)
- Boost::Asio异步UDP服务器-未处理的异常消息