:- use_module(library(http/http_dispatch)). http_switch_protocol(:Goal, 
+Options)
http_switch_protocol(:Goal, 
+Options)"HTTP 101 Switching Protocols" reply. After sending 
the reply, the HTTP library calls call(Goal, InStream, OutStream), 
where InStream and OutStream are the raw streams to the HTTP client. 
This allows the communication to continue using an an alternative 
protocol.
If Goal fails or throws an exception, the streams are 
closed by the server. Otherwise Goal is responsible for 
closing the streams. Note that Goal runs in the HTTP handler 
thread. Typically, the handler should be registered using the spawn 
option if http_handler/3 or Goal 
must call thread_create/3 to allow the 
HTTP worker to return to the worker pool.
The streams use binary (octet) encoding and have their I/O timeout set to the server timeout (default 60 seconds). The predicate set_stream/2 can be used to change the encoding, change or cancel the timeout.
This predicate interacts with the server library by throwing an exception.
The following options are supported:
headers(+Headers).