or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

bpf.mdcontext-ctxhttp.mdcontext.mddict.mddns-dnsmessage.mdhtml-atom.mdhtml-charset.mdhtml.mdhttp-httpguts.mdhttp-httpproxy.mdhttp2-h2c.mdhttp2-hpack.mdhttp2.mdicmp.mdidna.mdindex.mdipv4.mdipv6.mdnettest.mdnetutil.mdproxy.mdpublicsuffix.mdquic-qlog.mdquic.mdtrace.mdwebdav.mdwebsocket.mdxsrftoken.md
tile.json

netutil.mddocs/

Network Utility Functions

Package netutil provides network utility functions, complementing the more common ones in the net package.

Import

import "golang.org/x/net/netutil"

Functions

// LimitListener returns a Listener that accepts at most n simultaneous connections
func LimitListener(l net.Listener, n int) net.Listener

LimitListener

LimitListener returns a Listener that accepts at most n simultaneous connections from the provided Listener. This is useful for limiting resource usage in servers.

Usage Examples

Limiting Concurrent Connections

import (
    "fmt"
    "golang.org/x/net/netutil"
    "net"
    "net/http"
)

func startLimitedServer() error {
    // Create listener
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        return err
    }

    // Limit to 100 simultaneous connections
    limitedListener := netutil.LimitListener(listener, 100)

    // Serve HTTP on limited listener
    fmt.Println("Server listening on :8080 (max 100 connections)")
    return http.Serve(limitedListener, http.DefaultServeMux)
}

Custom Server with Connection Limits

func createLimitedHTTPServer(maxConnections int) *http.Server {
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        panic(err)
    }

    limitedListener := netutil.LimitListener(listener, maxConnections)

    server := &http.Server{
        Handler: http.DefaultServeMux,
    }

    go server.Serve(limitedListener)

    return server
}

// Usage:
// server := createLimitedHTTPServer(50)
// Server will accept at most 50 simultaneous connections

Preventing Resource Exhaustion

import (
    "golang.org/x/net/netutil"
    "log"
    "net"
)

func runProtectedServer(handler func(net.Conn)) error {
    listener, err := net.Listen("tcp", ":9000")
    if err != nil {
        return err
    }
    defer listener.Close()

    // Protect against too many connections
    limitedListener := netutil.LimitListener(listener, 25)

    log.Println("Server ready, max 25 connections")

    for {
        conn, err := limitedListener.Accept()
        if err != nil {
            log.Printf("Accept error: %v", err)
            continue
        }

        go handler(conn)
    }
}