2017-10-17 80 views
0

我已經refered以下網頁:如何在c中實現Python socket.unwrap()?

https://serverfault.com/questions/153983/sockets-found-by-lsof-but-not-by-netstat

使用Python,我也遇到了同樣的問題上SSL套接字: 當我使用socket.close(),插座保持在CLOSE_WAIT狀態無限期地 時我用socket.shutdown(),lsof的說:「不能確定協議」

解決的辦法是關閉之前解開了SSL層:

origsock = socket.unwrap() 
origsock.close() 

這會在我的應用程序中正確關閉套接字。

我喜歡問什麼unwrap()在python中做什麼以及如何在c中完成它?

+0

您是否閱讀過[documentation](https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.unwrap)? – Barmar

+0

你如何在C中進行SSL通信?它應該有一個方法來執行SSL關閉,在關閉套接字之前應該執行此操作。這就是'unwrap()'所做的。 – Barmar

回答

1

unwrap會執行正確的SSL關閉。這種關閉類似於TCP連接結束時的FIN握手,僅在SSL/TLS層。在C中如何完成此關閉取決於您使用的特定SSL/TLS堆棧。但是對於OpenSSL,您需要使用的功能是SSL_shutdown