2017-08-18 51 views
0

如何檢查Base.TCPSocket上是否存在數據,直到有數據時才阻塞。檢查tcpsocket上的數據

喜歡的東西select其中超時結構的兩個值設置爲0

感謝sbromberger誰指出我朝着nb_available這在紙上不正是我想要的東西。

在從此流或緩衝區讀取數據之前,將返回可讀取的字節數。

很遺憾,這沒有用。例如:

enter image description here

在左側應該說8個字節不是0

+1

'nb_available'是否做你需要的? – sbromberger

+0

@sbromberger我不知道這個函數存在。我只是試了一下,似乎不一致。我做了一個簡單的/客戶端的例子,有時它正確地寫了一些字節可用,有時它說0,儘管緩衝區上有東西。 – Nozdrum

+0

重複:https://stackoverflow.com/q/44969556/4183191 –

回答

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 
+1

值得澄清的是,'eof'沒有什麼特別之處;任何以某種方式檢查數據流上的數據的操作都會對報告的緩衝區大小進行這樣的更新。這更可能是一個微妙的茱莉亞錯誤,而不是預期的行爲。在同一個會話中,似乎還存在與訪問套接字作爲輸入和輸出有關的錯誤,而不是通過單獨的會話進行連接。 –

+1

也相關:https://github.com/JuliaLang/julia/issues/23591 – sbromberger

+0

我發現你在茱莉亞問題線程中的反應,你鏈接到可悲的不足和不滿意......但哦。 :p –