我目前正試圖在C++中實現我自己的Web服務器 - 不是爲了生產性使用,而是爲了學習。Linux中的套接字 - 我如何知道客戶端已完成?
我基本上打開一個套接字,監聽,等待連接並打開一個新的套接字,從中讀取客戶端發送的數據。到現在爲止還挺好。但是我怎麼知道客戶端已經完成發送數據,而不是因爲其他原因暫時停止發送更多的數據?
我當前的例子:當客戶端發送POST請求時,它首先發送頭,然後連續兩次「\ r \ n」,然後發送請求正文。有時身體不包含任何數據。因此,如果客戶端在發送標題後暫時無法發送任何內容 - 我怎麼知道它尚未完成其請求?
這是否完全取決於使用的協議(HTTP),我的任務是根據我收到的數據找出這個問題,或者是否有類似EOF的套接字?
如果我無法從套接字中獲取必要的信息,如何保護我的程序免受故障客戶端的攻擊? (無論如何,我想我必須這樣做,因爲它可能是一個攻擊者,而不是錯誤的客戶端發送錯誤的數據。)是我唯一的選擇,直到通過協議定義完成請求或超時(由我)達成了?
我希望這是有道理的。
順便說一句:請不要告訴我使用一些庫 - 我想了解基礎知識。
謝謝。這意味着我目前的「解決方法」實際上是要走的路。 :-) – sirion 2011-05-07 23:34:20