int udp_attach(struct socket *so) { so->s = socket_anyaddr_server( 0, SOCKET_DGRAM ); if (so->s != -1) { /* success, insert in queue */ so->so_expire = curtime + SO_EXPIRE; insque(so,&udb); } return(so->s); }
SysChannel sys_channel_create_tcp_server( int port ) { SysChannel channel = sys_channel_alloc(); channel->fd = socket_anyaddr_server( port, SOCKET_STREAM ); if (channel->fd < 0) { D( "%s: failed to created network socket on TCP:%d\n", __FUNCTION__, port ); sys_channel_free( channel ); return NULL; } D( "%s: server channel %p:%d now listening on port %d\n", __FUNCTION__, channel, channel->fd, port ); return channel; }
struct socket * udp_listen(u_int port, u_int32_t laddr, u_int lport, int flags) { struct socket *so; SockAddress addr; uint32_t addr_ip; if ((so = socreate()) == NULL) { free(so); return NULL; } so->s = socket_anyaddr_server( port, SOCKET_DGRAM ); so->so_expire = curtime + SO_EXPIRE; so->so_haddr_port = port; insque(so,&udb); if (so->s < 0) { udp_detach(so); return NULL; } socket_get_address(so->s, &addr); so->so_faddr_port = sock_address_get_port(&addr); addr_ip = sock_address_get_ip(&addr); if (addr_ip == 0 || addr_ip == loopback_addr_ip) so->so_faddr_ip = alias_addr_ip; else so->so_faddr_ip = addr_ip; so->so_laddr_port = lport; so->so_laddr_ip = laddr; if (flags != SS_FACCEPTONCE) so->so_expire = 0; so->so_state = SS_ISFCONNECTED; return so; }