static int lwip_socket_open(nsapi_stack_t *stack, nsapi_socket_t *handle, nsapi_protocol_t proto) { // check if network is connected if (!lwip_get_ip_address()) { return NSAPI_ERROR_NO_CONNECTION; } // allocate a socket struct lwip_socket *s = lwip_arena_alloc(); if (!s) { return NSAPI_ERROR_NO_SOCKET; } s->conn = netconn_new_with_callback( proto == NSAPI_TCP ? NETCONN_TCP : NETCONN_UDP, lwip_socket_callback); if (!s->conn) { lwip_arena_dealloc(s); return NSAPI_ERROR_NO_SOCKET; } netconn_set_recvtimeout(s->conn, 1); *(struct lwip_socket **)handle = s; return 0; }
static int lwip_socket_accept(nsapi_stack_t *stack, nsapi_socket_t server, nsapi_socket_t *handle, nsapi_addr_t *addr, uint16_t *port) { struct lwip_socket *s = (struct lwip_socket *)server; struct lwip_socket *ns = lwip_arena_alloc(); err_t err = netconn_accept(s->conn, &ns->conn); if (err != ERR_OK) { lwip_arena_dealloc(ns); return lwip_err_remap(err); } netconn_set_recvtimeout(ns->conn, 1); *(struct lwip_socket **)handle = ns; (void) netconn_peer(ns->conn, (ip_addr_t *)addr->bytes, port); addr->version = NSAPI_IPv4; return 0; }
static int lwip_socket_open(nsapi_stack_t *stack, nsapi_socket_t *handle, nsapi_protocol_t proto) { struct lwip_socket *s = lwip_arena_alloc(); if (!s) { return NSAPI_ERROR_NO_SOCKET; } s->conn = netconn_new_with_callback( proto == NSAPI_TCP ? NETCONN_TCP : NETCONN_UDP, lwip_socket_callback); if (!s->conn) { lwip_arena_dealloc(s); return NSAPI_ERROR_NO_SOCKET; } netconn_set_recvtimeout(s->conn, 1); *(struct lwip_socket **)handle = s; return 0; }