检查tcpsocket上是否有数据

时间:2017-08-18 12:32:47

标签: julia

如何检查Base.TCPSocket上是否有数据,在有数据之前不会阻塞。

select这样的东西,其中timeout-struct的两个值都设置为0。

感谢sbromberger指出我nb_available哪个在纸上完全符合我的要求。

  

返回从此流或缓冲区读取之前可读取的可用字节数。

可悲的是,这没用。例如:

enter image description here

在左侧,它应该说8个字节而不是0。

1 个答案:

答案 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