Я пытаюсь создать сервер TCP
в Haskell и до сих пор не могу открыть соединение с расширением браузера Google и оставить его открытым:
Error
Server.exe: Network.Socket.sendBuf: failed (Unknown error)
код
import Network.Socket
import qualified Network.Socket.ByteString as B
import Data.ByteString.Char8(pack,unpack)
main::IO()
main=do
sock<-socket AF_INET Stream 0
bind sock (SockAddrInet 8500 iNADDR_ANY)
listen sock 3
(csock,_)<-accept sock
loop csock
loop::Socket->IO()
loop csock=do
print "Begining of loop"
-- dat<-B.recv csock 2000
sent<-B.send csock $ pack "Hi!!"
-- print $ unwords ["Received :",unpack dat]
print "End of loop"
loop csock
Сначала я попробовал только с отправкой сообщений, и я получаю сообщение об ошибке, если я раскомментирую строки с recv
, он зависает
Вывод с закомментированными строками
"Begining of loop"
"End of loop"
"Begining of loop"
"End of loop"
"Begining of loop"
"End of loop"
"Begining of loop"
Server.exe: Network.Socket.sendBuf: failed (Unknown error)
Вывод с некомментированными строками
"Begining of loop"
"Received : GET / HTTP/1.1\r\nHost: localhost:8500\r\nConnection: Upgrade\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nUpgrade: websocket\r\nOrigin: chrome-extension://pfdhoblngboilpfeibdedpjgfnlcodoo\r\nSec-WebSocket-Version: 13\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/73.0.3683.103 Safari/537.36\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: en,en-US;q=0.9,ro;q=0.8\r\nSec-WebSocket-Key: WY87jPXNRfk/WM5T20O8Jg==\r\nSec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n\r\n"
"End of loop"
"Begining of loop"
P.S
Я использую расширение Simple WebSocket Client
в Chrome, и в обоих случаях соединение отображается как «Открывающееся», а не «Открытое», даже несмотря на то, что программа выполняет несколько итераций, как вы можете видеть в выходных данных