簡體   English   中英

在C ++模式下從套接字讀取套接字的所有可用字節的最佳方法

[英]Best way of reading all available bytes from socket in blocking mode, C++

從阻塞套接字讀取所有可用字節的最佳方法是什么? “可用”表示服務器響應是一堆文本行(每行都帶有“ \\ n”),而EOF是帶有某些前綴的行。 該響應的長度總是不同的,因此在閱讀之前我不知道。 我假設使用select()pollepoll ),然后使用'ioctl(FIONREAD)'是最好的方法,對嗎? 還是只是在讀取當時所有可用的內容,然后檢查是否達到了EOF,如果沒有達到,則再次重復所有操作? 是的,聽起來更合理。 這一切有意義嗎? 那么,最有效的方法是什么?

如果您要進行阻塞讀取,那么使用select / epoll毫無意義。

ioctl(FIONREAD)是一個非常無用的調用,因為到它返回更多數據時,它可能已經到達內核套接字緩沖區。

阻止讀取很容易:只要繼續read用戶空間套接字緩沖區,直到找到消息終止符即可。

理想情況下,您使用的網絡組件不應該關心套接字是處於阻塞模式還是非阻塞模式:當套接字准備好讀取時,應該調用一個函數。 在阻塞模式下,無論套接字是否准備就緒,都將調用此函數,如果沒有可用數據,它將在read時阻塞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM