Closed sigstop closed 11 years ago
What version of Erlang are you using, and can you share your code with us, or at least show us what your callback is returning?
R15B01 (happy to upgrade if you think that will help)
eport.yaws (the entry point for the websockets):
econnect.erl (the handler that is called) with this particular function called:
handle_message({text,B})-> <<_H,T/binary>> = B, Term = binary_to_term(T), error_logger:info_msg("Binary Received:~n~p~n",[B]), error_logger:info_msg("Term Received:~n~p~n",[Term]), error_logger:info_msg("My Pid = ~p~n",[self()]), spawn(eclient_stub,handle_message,[Term]);
eclient_stub:handle_message which is called by econnect(handle_message({text,B})->
handle_message(Term) when is_tuple(Term)-> error_logger:info_msg("This Client Pid = ~p~n",[self()]), error_logger:info_msg("Term Received:~n~p~n",[Term]).
Log...as you can see all the code seems to be executed..but this termination message still occurs:
=INFO REPORT==== 19-Mar-2013::16:27:24 === Binary Received: <<194,131,104,2,100,0,5,104,101,108,108,111,97,1>>
=INFO REPORT==== 19-Mar-2013::16:27:24 === Term Received: {hello,1}
=INFO REPORT==== 19-Mar-2013::16:27:24 === My Pid = <0.76.0>
=ERROR REPORT==== 19-Mar-2013::16:27:24 === * Generic server <0.76.0> terminating * Last message in was {tcp,#Port<0.4075>, <<129,142,137,16,17,24,75,147,121,26,237,16,20, 112,236,124,125,119,232,17>>} * When Server state == {state, {arg,#Port<0.4075>, {{127,0,0,1},59303}, {headers,"Upgrade",undefined,"localhost:28080", undefined,undefined,undefined,undefined,undefined, undefined,undefined,undefined,undefined,[], undefined,undefined,undefined,undefined,undefined, undefined,undefined,undefined, [{http_header,0,"Sec-WebSocket-Extensions", undefined,"x-webkit-deflate-frame"}, {http_header,0,"Sec-WebSocket-Version",undefined, "13"}, {http_header,0,"Sec-Websocket-Key",undefined, "d2UqkEN9xQevwR0E0fQ32w=="}, {http_header,1,'Cache-Control',undefined, "no-cache"}, {http_header,4,'Pragma',undefined,"no-cache"}, {http_header,0,"Origin",undefined, "http://localhost:28080"}, {http_header,6,'Upgrade',undefined,"websocket"}]}, {http_request,'GET',{abs_path,"/eport.yaws"},{1,1}}, undefined,"/eport.yaws",undefined,undefined, "/Users/sbailey/Git/E/www","/", "/Users/sbailey/Git/E/www/eport.yaws",undefined, undefined,<0.62.0>, [{"vdir","/apps/ /Users/sbailey/Git/erland/www"}], undefined,"/",undefined}, [{drop_on_timeout,false}, {keepalive_grace_period,2000}, {keepalive_timeout,30000}, {keepalive,false}, {close_timeout,5000}, {auto_fragment_threshold,1048576}, {auto_fragment_message,false}, {close_if_unmasked,false}, {max_message_size,16777216}, {max_frame_size,16777216}, {callback,basic}, {origin,any}], {ws_state,13,#Port<0.4075>,none}, {cbinfo,econnect,undefined,undefined,undefined, handle_message,undefined,undefined}, {{none,<<>>},[]}, basic,infinity,false,false,undefined,normal} * Reason for termination == \ {function_clause, [{yaws_websockets,handle_callback_result, [<0.77.0>, {state, {arg,#Port<0.4075>, {{127,0,0,1},59303}, {headers,"Upgrade",undefined,"localhost:28080", undefined,undefined,undefined,undefined,undefined, undefined,undefined,undefined,undefined,[],undefined, undefined,undefined,undefined,undefined,undefined, undefined,undefined, [{http_header,0,"Sec-WebSocket-Extensions", undefined,"x-webkit-deflate-frame"}, {http_header,0,"Sec-WebSocket-Version",undefined, "13"}, {http_header,0,"Sec-Websocket-Key",undefined, "d2UqkEN9xQevwR0E0fQ32w=="}, {http_header,1,'Cache-Control',undefined,"no-cache"}, {http_header,4,'Pragma',undefined,"no-cache"}, {http_header,0,"Origin",undefined, "http://localhost:28080"}, {http_header,6,'Upgrade',undefined,"websocket"}]}, {http_request,'GET',{abs_path,"/eport.yaws"},{1,1}}, undefined,"/eport.yaws",undefined,undefined, "/Users/sbailey/Git/E/www","/", "/Users/sbailey/Git/E/www/eport.yaws",undefined, undefined,<0.62.0>, [{"vdir","/apps/ /Users/sbailey/Git/erland/www"}], undefined,"/",undefined}, [{drop_on_timeout,false}, {keepalive_grace_period,2000}, {keepalive_timeout,30000}, {keepalive,false}, {close_timeout,5000}, {auto_fragment_threshold,1048576}, {auto_fragment_message,false}, {close_if_unmasked,false}, {max_message_size,16777216}, {max_frame_size,16777216}, {callback,basic}, {origin,any}], {ws_state,13,#Port<0.4075>,none}, {cbinfo,econnect,undefined,undefined,undefined, handle_message,undefined,undefined}, {{none,<<>>},[]}, basic,infinity,false,false,undefined,normal}], [{file,"src/yaws_websockets.erl"},{line,832}]}, {yaws_websockets,basic_messages,3, [{file,"src/yaws_websockets.erl"},{line,624}]}, {yaws_websockets,handle_frames,2, [{file,"src/yaws_websockets.erl"},{line,513}]}, {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,607}]}, {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]}
=INFO REPORT==== 19-Mar-2013::16:27:24 === This Client Pid = <0.77.0>
=INFO REPORT==== 19-Mar-2013::16:27:24 === Term Received: {hello,1}
If you look at chapter 14 of yaws.pdf you'll see what the return types of the websocket callback modules must be. If you have a basic callback module, see section 14.2.1, or see 14.2.2 for advanced callback modules. Please make sure your callback module, whichever type it is, is returning an allowed return value.
If you still have problems after verifying the return values, you might consider posting all of your code in a gist so we can see the entire modules, if that's ok with you.
Yup, you are right. The new updates are more strict. I was missing a 'noreply' return. Thanks!
I just upgraded, and my otherwise working (and very simple) websockets code crashed. Thoughts?
=ERROR REPORT==== 19-Mar-2013::12:54:48 === * Generic server <0.75.0> terminating * Last message in was {tcp,#Port<0.4064>, <<129,142,34,86,19,64,224,213,123,66,70,86,22,40, 71,58,127,47,67,87>>} * When Server state == {state, {arg,#Port<0.4064>, {{127,0,0,1},58289}, {headers,"Upgrade",undefined,"localhost:28080", undefined,undefined,undefined,undefined,undefined, undefined,undefined,undefined,undefined,[], undefined,undefined,undefined,undefined,undefined, undefined,undefined,undefined, [{http_header,0,"Sec-WebSocket-Extensions", undefined,"x-webkit-deflate-frame"}, {http_header,0,"Sec-WebSocket-Version",undefined, "13"}, {http_header,0,"Sec-Websocket-Key",undefined, "nNhJ/tCeYYZBpWCjXMmibA=="}, {http_header,1,'Cache-Control',undefined, "no-cache"}, {http_header,4,'Pragma',undefined,"no-cache"}, {http_header,0,"Origin",undefined, "http://localhost:28080"}, {http_header,6,'Upgrade',undefined,"websocket"}]}, {http_request,'GET',{abs_path,"/eport.yaws"},{1,1}}, undefined,"/eport.yaws",undefined,undefined, "/Users/sbailey/Git/E/www","/", "/Users/sbailey/Git/E/www/eport.yaws",undefined, undefined,<0.61.0>, [{"vdir","/apps/ /Users/sbailey/Git/erland/www"}], undefined,"/",undefined}, [{drop_on_timeout,false}, {keepalive_grace_period,2000}, {keepalive_timeout,30000}, {keepalive,false}, {close_timeout,5000}, {auto_fragment_threshold,1048576}, {auto_fragment_message,false}, {close_if_unmasked,false}, {max_message_size,16777216}, {max_frame_size,16777216}, {callback,basic}, {origin,any}], {ws_state,13,#Port<0.4064>,none}, {cbinfo,econnect,undefined,undefined,undefined, handle_message,undefined,undefined}, {{none,<<>>},[]}, basic,infinity,false,false,undefined,normal} * Reason for termination == \ {function_clause, [{yaws_websockets,handle_callback_result, [<0.76.0>, {state, {arg,#Port<0.4064>, {{127,0,0,1},58289}, {headers,"Upgrade",undefined,"localhost:28080", undefined,undefined,undefined,undefined,undefined, undefined,undefined,undefined,undefined,[],undefined, undefined,undefined,undefined,undefined,undefined, undefined,undefined, [{http_header,0,"Sec-WebSocket-Extensions", undefined,"x-webkit-deflate-frame"}, {http_header,0,"Sec-WebSocket-Version",undefined, "13"}, {http_header,0,"Sec-Websocket-Key",undefined, "nNhJ/tCeYYZBpWCjXMmibA=="}, {http_header,1,'Cache-Control',undefined,"no-cache"}, {http_header,4,'Pragma',undefined,"no-cache"}, {http_header,0,"Origin",undefined, "http://localhost:28080"}, {http_header,6,'Upgrade',undefined,"websocket"}]}, {http_request,'GET',{abs_path,"/eport.yaws"},{1,1}}, undefined,"/eport.yaws",undefined,undefined, "/Users/sbailey/Git/E/www","/", "/Users/sbailey/Git/E/www/eport.yaws",undefined, undefined,<0.61.0>, [{"vdir","/apps/ /Users/sbailey/Git/erland/www"}], undefined,"/",undefined}, [{drop_on_timeout,false}, {keepalive_grace_period,2000}, {keepalive_timeout,30000}, {keepalive,false}, {close_timeout,5000}, {auto_fragment_threshold,1048576}, {auto_fragment_message,false}, {close_if_unmasked,false}, {max_message_size,16777216}, {max_frame_size,16777216}, {callback,basic}, {origin,any}], {ws_state,13,#Port<0.4064>,none}, {cbinfo,econnect,undefined,undefined,undefined, handle_message,undefined,undefined}, {{none,<<>>},[]}, basic,infinity,false,false,undefined,normal}], [{file,"src/yaws_websockets.erl"},{line,832}]}, {yaws_websockets,basic_messages,3, [{file,"src/yaws_websockets.erl"},{line,624}]}, {yaws_websockets,handle_frames,2, [{file,"src/yaws_websockets.erl"},{line,513}]}, {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,607}]}, {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]}