Spinneret code hangs
Phil Pilgrim (PhiPi)
Posts: 23,514
I've been having rather more than intermittent problems with my Spinneret servers hanging. Here's the main loop that one of my servers uses to get requests:
Here's the wrapper code that it calls:
Right now, I know the main loop is running, because the yellow LED is flashing on and off. But it's not recognizing requests. The sniffer shows that every SYN that comes in is being answered by the W5100 with a RST.
-Phil
repeat if (request := server.request0) if (strcomp(request, string("/index")) or strcomp(request, string("/"))) main_page elseif (strcomp(request, string("/temp_chart.bmp"))) do_chart(TEMP) elseif (strcomp(request, string("/light_chart.bmp"))) do_chart(LIGHT) else server.not_found if (cnt - time => clkfreq * SAMPLE_INTERVAL) !outa[LED] ttemp += sense.temp_fahrenheit tlight += sense.ambient_light ifnot (nsamples := (nsamples + 1) // PLOT_INTERVAL) cht[TEMP].add_datum(ttemp * 10 / PLOT_INTERVAL) cht[LIGHT].add_datum(sense.log(tlight / PLOT_INTERVAL) * 1000 / sense.log(10)) ttemp~ tlight~ time += clkfreq * SAMPLE_INTERVAL
Here's the wrapper code that it calls:
PUB request repeat until get_request return parse(@data) PUB request0 if (get_request) return parse(@data) else return false PUB get_request : packet_size | time ifnot w5100.SocketTCPestablished(0) return ifnot (lookdown(get_status : $14, $16, $17, $11)) socket_reset return time := cnt repeat until (cnt - time > timeout) if (packet_size := W5100.rxTCP(0, @data)) data[packet_size]~ return socket_reset return PRI get_status : status w5100.readIND(w5100#_S0_SR, @status, 1) PRI socket_reset socket_close socket_open PRI socket_open w5100.SocketOpen(0, W5100#_TCPPROTO, port, port, @client) waitcnt(clkfreq / 4 + cnt) w5100.SocketTCPlisten(0) waitcnt(clkfreq / 4 + cnt) PRI socket_close w5100.SocketTCPdisconnect(0) waitcnt(clkfreq / 40 + cnt) w5100.SocketClose(0)
Right now, I know the main loop is running, because the yellow LED is flashing on and off. But it's not recognizing requests. The sniffer shows that every SYN that comes in is being answered by the W5100 with a RST.
-Phil
Comments