/* * Start UDP socket, listening at local port PORT */ int udp_init (udp_t *u, unsigned port) { int i; for (i = 0; i < MAX_SOCK_NUM; i++) { uint8_t s = w5100_readSnSR(i); if (s == SnSR_CLOSED || s == SnSR_FIN_WAIT) { u->sock = i; break; } } if (u->sock == MAX_SOCK_NUM) return 0; u->port = port; socket_init (u->sock, SnMR_UDP, u->port, 0); return 1; }
int client_connect (client_t *c) { int i; if (c->sock != MAX_SOCK_NUM) return 0; for (i = 0; i < MAX_SOCK_NUM; i++) { unsigned s = w5100_readSnSR (i); if (s == SnSR_CLOSED || s == SnSR_FIN_WAIT) { c->sock = i; break; } } if (c->sock == MAX_SOCK_NUM) return 0; _client_srcport++; if (_client_srcport == 0) _client_srcport = 1024; socket_init (c->sock, SnMR_TCP, _client_srcport, 0); if (! socket_connect (c->sock, c->ip, c->port)) { c->sock = MAX_SOCK_NUM; return 0; } while (client_status(c) != SnSR_ESTABLISHED) { usleep (10000); if (client_status(c) == SnSR_CLOSED) { c->sock = MAX_SOCK_NUM; return 0; } } return 1; }
unsigned client_status (client_t *c) { if (c->sock == MAX_SOCK_NUM) return SnSR_CLOSED; return w5100_readSnSR (c->sock); }