2011-08-14 38 views
0

在尋找的答案,this question我發現this sample code它看起來像正是我需要的,除了它調用這個C代碼使用了select_wait()函數在哪裏?

select_wait() 
這是在 non_blocking.h定義

但在其它方面unlocatable。

是select_wait()專有代碼?它是我可以獲得的某個DLL中的入口點嗎?我該如何複製select_wait()所做的任何事情?簡單地忽略select_wait()並立即重試BIO_read/write調用看起來是否安全?

更新:在測試代碼時,select_wait()似乎是必需的,因爲如果輸入不可用,BIO_read將掛起。但是,RSA的示例代碼在跳出for循環之前至多會執行一次成功的BIO_read,因此它們的代碼也無法接受來自原始問題中描述的Chrome的POST。

+1

你爲什麼不cscope找到它? – Heisenbug

回答

0

顯然它是專有BSAFE庫/框架

+0

顯然如此,可能相當於BIO_get_fd(bio_con,sock),fd_zero(fdset),fd_set(sock,fdset),select(...)。但是,示例代碼不適用於Chrome POST,因爲BIO_read需要多次調用。 –

0

的一部分,如果你有一個套接字句柄,使用select() WinSock API function

+0

我認爲混合'select()'和'BIO_read()'可能會導致高度混淆的結果。如果使用較低級別的'SSL_read'等,應該沒問題,只要你可以處理額外的複雜性。 – Hasturkun

+0

@Eugene:我認爲select()和準備從SSL緩衝區讀取的內容沒有任何關聯。我將在沒有select_wait()的情況下嘗試代碼並查看會發生什麼。 –

+0

@Eugene:我收回它。 Openssl BIO_should_retry頁面說:「一種解決方案是使用非阻塞I/O並在select()(或等效)調用上使用超時。」我會試一試。 –

相關問題