bool AsyncClient::connect(IPAddress ip, uint16_t port){ if (_pcb){ log_w("already connected, state %d", _pcb->state); return false; } if(!_start_async_task()){ log_e("failed to start task"); return false; } ip_addr_t addr; addr.type = IPADDR_TYPE_V4; addr.u_addr.ip4.addr = ip; tcp_pcb* pcb = tcp_new_ip_type(IPADDR_TYPE_V4); if (!pcb){ log_e("pcb == NULL"); return false; } tcp_arg(pcb, this); tcp_err(pcb, &_tcp_error); if(_in_lwip_thread){ tcp_connect(pcb, &addr, port,(tcp_connected_fn)&_s_connected); } else { _tcp_connect(pcb, &addr, port,(tcp_connected_fn)&_s_connected); } return true; }
void netio_init(void) { struct tcp_pcb *pcb; pcb = tcp_new_ip_type(IPADDR_TYPE_ANY); tcp_bind(pcb, IP_ANY_TYPE, 18767); pcb = tcp_listen(pcb); tcp_accept(pcb, netio_accept); }
void tcpecho_raw_init(void) { tcpecho_raw_pcb = tcp_new_ip_type(IPADDR_TYPE_ANY); if (tcpecho_raw_pcb != NULL) { err_t err; err = tcp_bind(tcpecho_raw_pcb, IP_ANY_TYPE, 7); if (err == ERR_OK) { tcpecho_raw_pcb = tcp_listen(tcpecho_raw_pcb); tcp_accept(tcpecho_raw_pcb, tcpecho_raw_accept); } else { /* abort? output diagnostic? */ } } else { /* abort? output diagnostic? */ } }
struct altcp_pcb * altcp_tcp_new_ip_type(u8_t ip_type) { /* Allocate the tcp pcb first to invoke the priority handling code if we're out of pcbs */ struct tcp_pcb *tpcb = tcp_new_ip_type(ip_type); if (tpcb != NULL) { struct altcp_pcb *ret = altcp_alloc(); if (ret != NULL) { altcp_tcp_setup(ret, tpcb); return ret; } else { /* altcp_pcb allocation failed -> free the tcp_pcb too */ tcp_close(tpcb); } } return NULL; }
void AsyncServer::begin(){ if(_pcb) return; if(!_start_async_task()){ log_e("failed to start task"); return; } int8_t err; _pcb = tcp_new_ip_type(IPADDR_TYPE_V4); if (!_pcb){ log_e("_pcb == NULL"); return; } ip_addr_t local_addr; local_addr.type = IPADDR_TYPE_V4; local_addr.u_addr.ip4.addr = (uint32_t) _addr; err = _tcp_bind(_pcb, &local_addr, _port); if (err != ERR_OK) { _tcp_close(_pcb); log_e("bind error: %d", err); return; } static uint8_t backlog = 5; _pcb = _tcp_listen_with_backlog(_pcb, backlog); //_pcb = _tcp_listen(_pcb); if (!_pcb) { log_e("listen_pcb == NULL"); return; } tcp_arg(_pcb, (void*) this); tcp_accept(_pcb, &_s_accept); }