2009-10-07 93 views
2

我在AIX 5.3上的Perl 5.8.2中執行sysread。根據文檔,sysread應該在讀取所有從文件句柄讀取時給出0。從套接字讀取時,爲什麼我的Perl sysread塊?

在我的方案中,文件句柄是STDIN並指向套接字。所以我基本上從插座做sysread。但是,我從來沒有從sysread得到0,即使在客戶端發送完所有數據後,它也會阻塞。

任何想法可能是錯誤的?

謝謝。

回答

5

你是什麼意思「發送所有數據」? sysread當句柄遇到文件結束條件時返回零,而不是當沒有更多數據可用現在。對於套接字,讀取時EOF發生在另一方關閉套接字進行寫入時。 (當然,和sysread也將返回undef,它在數值上等於零,如果作爲網絡超時發生這樣的錯誤。)

+0

我有一個while循環sysread執行從套接字讀取數據時.. 但它一直阻止甚至在我的客戶端發送的所有數據.. sysread執行只有幾個街區.. – someguy 2009-10-07 09:54:43

+0

是的,你已經說過了。 – hobbs 2009-10-07 09:56:27

+2

你的客戶顯然不關閉它的輸出文件句柄,'sysread()'不是通靈。 – Hasturkun 2009-10-07 10:09:14

2

檢查出select命令(具有4個參數)。它可以告訴你 是否有任何輸入要在你的文件句柄上讀取。