C 中的 Unix 套接字 - 读取套接字中的循环

发布于 2024-12-13 01:45:22 字数 191 浏览 0 评论 0原文

我有两个带有套接字连接的进程。 一个进程正在向套接字写入一件事,然后关闭连接。 另一个进程等待监听,当连接被接受时,它进入“读取”循环,因此它将从第一个进程获取消息并执行与之相关的任何操作,然后等待来自第一个进程的其他消息。 当第一个进程关闭时,第二个进程会一遍又一遍地读取同一条消息,当然,一遍又一遍地执行与该消息有关的任何操作。 这里发生了什么以及我该如何通过它?

I have two processes with a socket connection.
One process is writing one thing to the socket and then close the connection.
The other process waits on listen and when the connection accepted, it enters a loop of 'read' so it will get the message from the first process and do whatever it has to do with it, and later waits for other messages from the first process.
When the first process is closed, the second process is reading the same message over and over again, and of course, do whatever it has to do with it, again and again..
Whats happened here and how do i pass it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好多鱼好多余 2024-12-20 01:45:22

您必须忽略 EOS 条件,并且可能完全忽略 read() 返回的值。它返回正字节计数,或者在 EOS 处返回零,或者在带有伴随 errno 的错误时返回 -1。如果得到零,则必须关闭套接字并停止读取;如果在大多数情况下你得到-1,同上;如果得到正字节数,则必须只处理读取缓冲区中的那么多字节。

You must be ignoring the EOS condition, and probably ignoring the value returned by read() altogether. It returns a positive byte count, or zero at EOS, or -1 on an error with an accompanying errno. If you get zero you must close the socket and stop reading; if you get -1 in most cases ditto; if you get a positive byte count you must only process that many bytes in the read buffer.

离笑几人歌 2024-12-20 01:45:22

很难说没有手头的代码,但我总是根据 Beej 指南 编写套接字代码而且它从未失败过。也许您可以在那里找到答案。

Hard to say without the code at hand, but I've always written my socket code based on Beej's guide and it's never failed. Perhaps you can find your answer there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文