Функция recv
в Network.Socket
или Network.Socket.Bytestring
требует аргументов - длины данных для чтения. В моем проекте я не могу знать длину данных для чтения из сокета.
И я хочу: а) прочитать все данные, которые собираются вместе, б) и объединить их
Например, в Эликсире это делает то, что я хочу:
:gen_tcp.recv(my_socket, 0)
В Haskell Я думаю, что могу сделать это в al oop, с fix
. Но как аккуратно сделать это с recv
, собрать и вернуть целое ByteString
из всех oop?
Кроме того, в документации говорится, что если recv
возвращает 0 байтов, это означает, что сокет другой стороны был закрыт. Однако это не означает, что все данные были прочитаны, и поэтому они были закрыты, не так ли? Если правильно, как я могу это обнаружить?