Witam, używam stosu uIP na mikro kontrolerze atmela, próbowałem na nim uruchomić prosty serwer statystyk - działa, ale gdy chciałem, aby to kontroler łączył się z serwerem, to właśnie już jest problem, kontroler po ~~ 10s od załadowania wysyła zapytanie ARP, dostaje odpowiedź, no i na tym się w sumie kończy, nie ma dalej żadnych pakietów TCP np z flagą SYN, ani nic?
void
hello_world_init(void)
{
/* We start to listen for connections on TCP port 1000. */
struct hello_world_state *s = &(uip_conn->appstate);
uip_ipaddr(ipaddr, 192,168,0,101);
conn=uip_connect(&ipaddr,HTONS(1000));
}
to jest funkcja init u mnie
void
hello_world_appcall(void)
{
/*
* The uip_conn structure has a field called "appstate" that holds
* the application state of the connection. We make a pointer to
* this to access it easier.
*/
struct hello_world_state *s = &(uip_conn->appstate);
/*
* If a new connection was just established, we should initialize
* the protosocket in our applications' state structure.
*/
if(uip_connected()) {
PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));
}
/*
* Finally, we run the protosocket function that actually handles
* the communication. We pass it a pointer to the application state
* of the current connection.
*/
handle_connection(s);
}
tak wygląda appcall
static int
handle_connection(struct hello_world_state *s)
{
PSOCK_BEGIN(&s->p);
PSOCK_READTO(&s->p, '\n');
PSOCK_SEND_STR(&s->p, "Hello. What is your name?\n");
strncpy(s->name, s->inputbuffer, sizeof(s->name));
PSOCK_SEND_STR(&s->p, "Hello ");
PSOCK_SEND_STR(&s->p, s->name);
PSOCK_CLOSE(&s->p);
PSOCK_END(&s->p);
}
i Handle connection
Oczywiście mam pętlę główną od uIP, która wygląda tak jak w przykładzie
https://github.com/aeruder/uip/blob/master/doc/example-mainloop-with-arp.c
Czy ktoś mógłby mi pomóc?
Dziękuję