আমি সমবর্তী প্রসঙ্গে ওপেনএসএসএল.সেশন এপিআই সঠিকভাবে কীভাবে ব্যবহার করব তা জানার চেষ্টা করছি
যেমন ধরুন আমি একটি বাস্তবায়ন করতে stunnel-style ssl-wrapper
চাই, আমি নিম্নলিখিত মৌলিক কঙ্কালের কাঠামোটি আশা করব যা একটি নিষ্পাপ প্রয়োগ করেfull-duplex tcp-port-forwarder:
runProxy :: PortID -> AddrInfo -> IO ()
runProxy localPort@(PortNumber lpn) serverAddrInfo = do
listener <- listenOn localPort
forever $ do
(sClient, clientAddr) <- accept listener
let finalize sServer = do
sClose sServer
sClose sClient
forkIO $ do
tidToServer <- myThreadId
bracket (connectToServer serverAddrInfo) finalize $ \sServer -> do
-- execute one 'copySocket' thread for each data direction
-- and make sure that if one direction dies, the other gets
-- pulled down as well
bracket (forkIO (copySocket sServer sClient
`finally` killThread tidToServer))
(killThread) $ \_ -> do
copySocket sClient sServer -- "controlling" thread
where
-- |Copy data from source to dest until EOF occurs on source
-- Copying may also be aborted due to exceptions
copySocket :: Socket -> Socket -> IO ()
copySocket src dst = go
where
go = do
buf <- B.recv src 4096
unless (B.null buf) $ do
B.sendAll dst buf
go
-- |Create connection to given AddrInfo target and return socket
connectToServer saddr = do
sServer <- socket (addrFamily saddr) Stream defaultProtocol
connect sServer (addrAddress saddr)
return sServer
উপরের কঙ্কালটিকে আমি কীভাবে রূপান্তর করব full-duplex ssl-wrapping tcp-forwarding proxy
? HsOpenSSL এপিআই দ্বারা প্রদত্ত ফাংশন কলগুলির সমবর্তী / সমান্তরাল সম্পাদনের (উপরের ব্যবহারের ক্ষেত্রে প্রসঙ্গে) বিপদ ডাব্লুআরটি কোথায়?
PS: আমি কীভাবে ব্যতিক্রম এবং সংস্থান-ফাঁসের কোডটিকে শক্তিশালী আর্ট তৈরি করতে পারি তা সম্পূর্ণরূপে বোঝার জন্য লড়াই করছি। সুতরাং, এই প্রশ্নের প্রাথমিক কেন্দ্রীভূত না হলেও, যদি আপনি উপরের কোডটিতে কোনও খারাপ কিছু লক্ষ্য করেন তবে দয়া করে একটি মন্তব্য করুন।
full-duplex ssl-rewrapping tcp-forwarding
), তবে এটি পরিবর্তে Network.TLS
(প্যাকেজ tls
) ব্যবহার করেছে। এবং এটি কুরুচিপূর্ণ ছিল। আগ্রহী হলে আপনি এটি এখানে খুঁজে পেতে পারেন ।