Haskell'in UDP ve TCP'yi aynı bağlantı noktasında dinlemesini nasıl sağlayabilirim? İşte TCP ve UDP'yi aynı bağlantı noktasında dinleme
şimdiye kadar (acme-http dayanarak) olan koddur: Ben iyi derler ama ben takip çalışma zamanı hatası almaklistenOn portm = do
protoTCP <- getProtocolNumber "tcp"
E.bracketOnError
(socket AF_INET Stream protoTCP)
sClose
(\sock -> do
setSocketOption sock ReuseAddr 1
setSocketOption sock NoDelay 1
bindSocket sock (SockAddrInet (fromIntegral portm) iNADDR_ANY)
listen sock (max 1024 maxListenQueue)
return sock
)
protoUDP <- getProtocolNumber "udp"
E.bracketOnError
(socket AF_INET Datagram protoUDP)
sClose
(\sock -> do
setSocketOption sock ReuseAddr 1
bindSocket sock (SockAddrInet (fromIntegral portm) iNADDR_ANY)
return sock
)
: on, maalesef belgelere
user error (accept: can't perform accept on socket ((AF_INET,Datagram,17)) in status Bound)
Haskell'de ağ programlaması biraz sınırlıdır (her zamanki gibi). Bu şeyleri anlamak için nereye bakacağımı bilmiyorum.
[GÜNCELLEME] herkes için
burada, ilgilenen sonucudur:
https://github.com/joehillen/acme-sip/blob/master/Acme/Serve.hs
Ben iyileştirilmesi için oda bir sürü var farkındayım ama işe yarıyor.
Kurulumunuzun özellikleri size yardımcı olacaktır. Kodunuz ağ 2.4.1.2 kullanarak GHC 7.6.3 x86-64, Linux, benim için iyi çalışıyor. Ayrıca, belgelerin üzerinde jab gereksizdir - Ağ orta derecede iyi belgelenmiş, büyük ölçüde doğrudan C çağrılarıdır, bu yüzden adam sayfaları yararlıdır ve paket github üzerindedir, böylece yama göndermek için kendinizi özgür hissedebilirsiniz. –