如何檢查Base.TCPSocket上是否存在數據,直到有數據時才阻塞。檢查tcpsocket上的數據
喜歡的東西select其中超時結構的兩個值設置爲0
感謝sbromberger誰指出我朝着nb_available這在紙上不正是我想要的東西。
在從此流或緩衝區讀取數據之前,將返回可讀取的字節數。
很遺憾,這沒有用。例如:
在左側應該說8個字節不是0
如何檢查Base.TCPSocket上是否存在數據,直到有數據時才阻塞。檢查tcpsocket上的數據
喜歡的東西select其中超時結構的兩個值設置爲0
感謝sbromberger誰指出我朝着nb_available這在紙上不正是我想要的東西。
在從此流或緩衝區讀取數據之前,將返回可讀取的字節數。
很遺憾,這沒有用。例如:
在左側應該說8個字節不是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
值得澄清的是,'eof'沒有什麼特別之處;任何以某種方式檢查數據流上的數據的操作都會對報告的緩衝區大小進行這樣的更新。這更可能是一個微妙的茱莉亞錯誤,而不是預期的行爲。在同一個會話中,似乎還存在與訪問套接字作爲輸入和輸出有關的錯誤,而不是通過單獨的會話進行連接。 –
也相關:https://github.com/JuliaLang/julia/issues/23591 – sbromberger
我發現你在茱莉亞問題線程中的反應,你鏈接到可悲的不足和不滿意......但哦。 :p –
'nb_available'是否做你需要的? – sbromberger
@sbromberger我不知道這個函數存在。我只是試了一下,似乎不一致。我做了一個簡單的/客戶端的例子,有時它正確地寫了一些字節可用,有時它說0,儘管緩衝區上有東西。 – Nozdrum
重複:https://stackoverflow.com/q/44969556/4183191 –