Pregunta

Cuando comienzo una función dentro de la cáscara de ERL, que funciona bien. Cuando trato de invocar la misma función con erl ... módulo de función -s, falla.

La línea de código que finalmente falla es:

start(Port) ->
    mochiweb_http:start([{port, Port}, {loop, fun dispatch_requests/1}]).

Estoy seguro de que el puerto está configurado correctamente. Mi mensaje de error es:

=CRASH REPORT==== 17-Jan-2010::00:21:09 ===
  crasher:
    initial call: mochiweb_socket_server:acceptor_loop/1
    pid: <0.65.0>
    registered_name: []
    exception exit: {error,closed}
      in function  mochiweb_socket_server:acceptor_loop/1
    ancestors: [mochiweb_http,<0.1.0>]
    messages: []
    links: []
    dictionary: []
    trap_exit: false
    status: running
    heap_size: 377
    stack_size: 24
    reductions: 93
  neighbours:

He probado el depurador y que me deja paso a través justo hasta encima se da la línea de código. Después de que pase eso, me da este informe de bloqueo.

Cualquier ayuda es muy apreciada.

¿Fue útil?

Solución

Hm, creo que debería funcionar. Son todos los módulos compilados con la misma versión del compilador? IIRC puede haber errores extraños en el nivel de socket si no. Por cierto, es posible llamar a su función de punto de entrada empezar, que es lo habitual en -s.

Otros consejos

También puede probar la opción -eval:

erl -eval 'module:start(9090).'

cuando se utiliza -s, los argumentos se recogen en una lista, por lo que el puerto sería en realidad encerrada en una lista. se puede comprobar ambos casos (lista o int) con una función de contenedor (como start([Port])).

Cuando se utiliza -s para ejecutar funciones de Erlang, los argumentos se ponen en una lista de átomos . Cuando se utiliza -run para ejecutar funciones de Erlang, los argumentos se ponen en una lista de cadenas .

Si necesita un entero valor de transmitir, tendrá que hacer las conversiones adecuadas. Si desea cubrir todos los casos, algo como esto podría ayudar a:

start([Port]) when is_atom(Port) ->
    start([atom_to_list(Port)]);
start([Port]) when is_list(Port) ->
    start(list_to_integer(Port));
start(Port) when is_integer(Port) ->
    mochiweb_http:start([{port, Port}, {loop, fun dispatch_requests/1}]).

Consulte la página del manual de ERL ( "ERL -man ERL") para más detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top