Ich versuche, das Empfangs-Timeout für ein Socket zu setzen, das mit dem Network.Socket
-Modul erstellt wurde. Hier ist ein Codeausschnitt:
Die Zeile setSocketOption
löst eine Ausnahme aus:
setSocketOption
akzeptiert nur Int
Argumente für Einstellungen, aber nicht alle Socket-Optionen möchten ein Int
. Speziell RecvTimeOut
und SendTimeOut
erwarten eine struct timeval
. Gibt es eine andere Möglichkeit, diese Optionen aus Haskell zu setzen?
Ich führe GHC 7.4.2 auf OSX 10.8.1
BEARBEITEN:
Network.Socket.Options
scheint hier die beste Lösung zu sein, und es hat sich herausgestellt, dass es nur eine winzige Pull-Anforderung erfordert, sie auf OSX zu kompilieren. Ab Version 0.2.0.1 kompiliert network-socket-options jetzt unter OSX.
EDIT 2:
Kein Glück mit Network.Socket.Options
. Die Funktion setRecvTimeout
scheint keine Auswirkungen auf OSX zu haben. Am Ende habe ich timeout
aus dem Paket System.Timeout
als Workaround verwendet.
Ich lese über Haskell und Struct-Definitionen von hier: Ссылка . Die struct timeval Definition von der MSDN hier (Es ist die gleiche Struktur auf GNU und wahrscheinlich auf OSX): Ссылка
die Zeit C-Header:
%Vor%Es scheint, als ob Sie in Haskell eine Art von Strukturkonstruktor definieren müssen. Oder eine vollständige Bindung an die Zeit-Header wie diese (aus Ссылка ):
%Vor%Eine auf die notwendige Version reduzierte Version wäre:
%Vor%Sie sollten dann in der Lage sein, eine timeval-Struktur zu initialisieren:
%Vor%Ich hoffe, das hilft ein bisschen ...