1
只有一次,當創建一個新的連接時,我想窺視流以確定連接是否是SSL連接。爲此,我使用recv()和MSG_PEEK標誌。問題是,對於不是SSL連接的連接,並且沒有任何初始傳入數據,recv會阻塞幾秒鐘。我如何解決這個問題?爲什麼recv()與MSG_PEEK塊?
只有一次,當創建一個新的連接時,我想窺視流以確定連接是否是SSL連接。爲此,我使用recv()和MSG_PEEK標誌。問題是,對於不是SSL連接的連接,並且沒有任何初始傳入數據,recv會阻塞幾秒鐘。我如何解決這個問題?爲什麼recv()與MSG_PEEK塊?
如果您不希望呼叫被阻止,您也可以提供MSG_DONTWAIT
標誌(不是POSIX,但廣泛實現) - 但您如何分辨初始數據剛剛沒有的SSL連接,還沒到達,還有一個非SSL連接?
似乎要做到這一點可靠,您將需要等待數據的第一部分無論如何到達。
使用非阻塞文件描述符? –
@KerrekSB我不想重寫我的代碼的整個網絡處理部分只是爲了使這個工作 – chacham15