int bind(int socket, const struct sockaddr *address, socklen_t address_len) { int r; nwio_tcpconf_t tcpconf; nwio_udpopt_t udpopt; r= ioctl(socket, NWIOGTCPCONF, &tcpconf); if (r != -1 || (errno != ENOTTY && errno != EBADIOCTL)) { if (r == -1) return r; r= _tcp_bind(socket, address, address_len, &tcpconf); #if DEBUG if (r == -1) { int t_errno= errno; fprintf(stderr, "bind(tcp) failed: %s\n", strerror(errno)); errno= t_errno; } #endif return r; } r= ioctl(socket, NWIOGUDPOPT, &udpopt); if (r != -1 || (errno != ENOTTY && errno != EBADIOCTL)) { if (r == -1) return r; return _udp_bind(socket, address, address_len, &udpopt); } #if DEBUG fprintf(stderr, "bind: not implemented for fd %d\n", socket); #endif errno= ENOSYS; return -1; }
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); }
int tcp_bind_tls(uv_tcp_t *handle, struct sockaddr *addr) { return _tcp_bind(handle, addr, tls_accept); }