github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/experimental/sock/sock.go (about) 1 package sock 2 3 import ( 4 "context" 5 6 "github.com/wasilibs/wazerox/internal/sock" 7 ) 8 9 // Config configures the host to open TCP sockets and allows guest access to 10 // them. 11 // 12 // Instantiating a module with listeners results in pre-opened sockets 13 // associated with file-descriptors numerically after pre-opened files. 14 type Config interface { 15 // WithTCPListener configures the host to set up the given host:port listener. 16 WithTCPListener(host string, port int) Config 17 } 18 19 // NewConfig returns a Config for module instantiation. 20 func NewConfig() Config { 21 return &internalSockConfig{c: &sock.Config{}} 22 } 23 24 // internalSockConfig delegates to internal/sock.Config to avoid circular 25 // dependencies. 26 type internalSockConfig struct { 27 c *sock.Config 28 } 29 30 // WithTCPListener implements Config.WithTCPListener 31 func (c *internalSockConfig) WithTCPListener(host string, port int) Config { 32 cNew := c.c.WithTCPListener(host, port) 33 return &internalSockConfig{cNew} 34 } 35 36 // WithConfig registers the given Config into the given context.Context. 37 func WithConfig(ctx context.Context, config Config) context.Context { 38 if config, ok := config.(*internalSockConfig); ok && len(config.c.TCPAddresses) > 0 { 39 return context.WithValue(ctx, sock.ConfigKey{}, config.c) 40 } 41 return ctx 42 }