我写了一些简单的代码来学习 TCPSocket 的结构。我认为它就像一个 IO 流,所以我尝试使用 seek
将“读取位置”向后移动一个字节:
socket.gets #=> hello world
socket.seek(-5, IO::SEEK_CUR)
socket.gets #=> hello world # this should return world
但是,它给了我一个错误:
server.rb:11:in `seek': Illegal seek (Errno::ESPIPE)
有谁知道为什么这不起作用?
最佳答案
如果是这种情况,那么套接字需要在有人决定向后查找时保留所有数据(以及如何向前查找工作,阻止更多数据?)。您可能很容易围绕套接字编写一个包装类,以跟踪位置并在需要时缓冲所有数据或 block 等。
但也许你可以尝试使用 IO#bytes或 IO#chars结合Enumerator#peek ?
关于ruby - 为什么 IO#seek 不适用于 TCPSocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16396779/