如何检查Base.TCPSocket上是否有数据,在有数据之前不会阻塞。
像select这样的东西,其中timeout-struct的两个值都设置为0。
感谢sbromberger指出我nb_available哪个在纸上完全符合我的要求。
返回从此流或缓冲区读取之前可读取的可用字节数。
可悲的是,这没用。例如:
在左侧,它应该说8个字节而不是0。
答案 0 :(得分:0)
要跟进@ tasos-papastylianou的链接解决方案,服务器上的@async eof(c)
似乎会导致nb_available
更新。请注意,它将在该时间点提供正确的值,并且后续写入不会在没有nb_available
的情况下更新read
。这是一个例子(假设连接已经建立):
client> write(c, 12.5)
server> nb_available(c)
0
server> @async eof(c)
Task (done) @0x0000000123b7f850
server> nb_available(c)
8
client> write(c, 12.5)
client> write(c, 22.5)
server> nb_available(c)
8
server> @async eof(c)
Task (done) @0x0000000123b7c010
server> nb_available(c)
8
server> read(c,8)
8-element Array{UInt8,1}:
0x00
0x00
0x00
0x00
0x00
0x80
0x36
0x40
server> nb_available(c)
0
server> @async eof(c)
Task (done) @0x0000000123b7c010
server> nb_available(c)
16