int sc_tcp_ipv4_listen(struct sc_tcp_server *self, const struct sc_tcp_server_settings *settings, const char *addr, unsigned port, int f, unsigned backlog) { struct sockaddr_in sin = { .sin_family = AF_INET }; int e; //s = settings; if((e = init_ipv4(&sin, addr, port)) != 1) return e; return init_tcp(self, settings, (struct sockaddr *)&sin, sizeof(sin), f, backlog); }
/* 1:ok, 0:bad address, -1:errno */ int eh_server_ipv4_tcp(struct eh_server *self, const char *addr, unsigned port, bool cloexec) { struct sockaddr_in sin; int fd; int e = init_ipv4(&sin, addr, port); if (e != 1) return e; /* 0 or -1 */ if ((fd = init_tcp(sin.sin_family, cloexec)) < 0) return -1; /* socket() call failed */ else if (bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { close(fd); return -1; /* bind() failed */ } eh_io_init(&self->connection_watcher, connect_callback, self, fd, EH_READ); return 1; }