Esempio n. 1
0
err_t EthernetClient::do_poll(void *arg, struct tcp_pcb *cpcb)
{
	EthernetClient *client = static_cast<EthernetClient*>(arg);

	if(client->_connected) {
		if(cpcb->keep_cnt_sent++ > 4) {
			cpcb->keep_cnt_sent = 0;
			/* Stop polling */
			tcp_poll(cpcb, NULL, 0);
			tcp_abort(cpcb);
			return ERR_OK;
		}
		/* Send tcp keep alive probe */
		tcp_keepalive(cpcb);
		return ERR_OK;
	}

	/* We only end up here if the connection failed to close
	 * in an earlier call to tcp_close */
	err_t err = tcp_close(cpcb);

	if (err != ERR_OK) {
		/* error closing, try again later in poll (every 2 sec) */
		tcp_poll(cpcb, do_poll, 4);
		return err;
	}

	return err;
}
Esempio n. 2
0
static int _tcp_keepalive(lua_State *L)
{
	int fd = luaL_checkint(L, 1);
	int keep_alive = lua_toboolean(L, 2);
	int ret = tcp_keepalive(fd, keep_alive);
	lua_pushinteger(L, ret);
	return 1;
}