【发布时间】:2023-03-17 18:55:01
【问题描述】:
只要不使用 fd_set(..) /select,我就可以接收和发送数据。
之后我无法向客户端发送数据。数据“在”终止进程后发送(按 ctrl C)。
例如,如果我运行 sn-p:
http://www.binarytides.com/multiple-socket-connections-fdset-select-linux/
我收到“欢迎客户端连接消息”(第 126 行),但在下一个循环之后,新客户端通过 fd_set 和 select 添加。第 171 行应该将收到的消息发送回客户端,但我只有在 终止进程后才能将其取回。
可能是因为“运行服务器的操作系统”认为连接繁忙并缓冲输出。这可能是杀死进程导致缓冲区被发送到客户端的原因。
如果我使用 write() 而不是 send() 行为不会改变。
整数计数 = 写入()
计数很好,代码不会抛出任何错误。
我在两个 ubuntu 14.04 系统(一个 lts 和其他一些从源代码构建)上尝试过它
如果您需要更多的 src 代码,我会上传它。我只是认为链接中的示例有据可查并显示了问题。
我已经找到了很多关于这个主题的东西,但是我不知道我做错了什么,因为所有的教程和文档都是这样做的。
不幸的是,我对 c++/linux 不太熟悉,也不知道接下来要研究什么。所以任何帮助表示赞赏。
谢谢:)
【问题讨论】:
-
你是如何测试的?您如何确定何时发送数据?很可能,问题出在另一端,直到连接关闭才检查数据。
-
你为什么要标记这个 C++。链接的源代码看起来像普通的 C。
-
David Schwartz:如果我不使用 fd_*,通信就可以正常工作。例如,如果我不使用普通的 read() 和 write 方法,我可以发送和接收数据。 (客户端明白了)
alk:你说得对,我贴的例子是纯c