| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package tracer
- import (
- "fmt"
- "io"
- "net"
- "strings"
- )
- const (
- offsetInferServerAddr = "127.0.0.1"
- offsetInferServerPort = 54583
- bufferSize = 16
- )
- func kernelOffsetInferServer(listener net.Listener) error {
- fmt.Println("[eBPF Kernel Adapt] kernel_offset_infer_server started.")
- //cpuOnlineCount := runtime.NumCPU()
- go func() {
- for {
- conn, err := listener.Accept()
- if err != nil {
- fmt.Printf("[eBPF Kernel Adapt] Fail to accept client request: %v\n", err)
- return
- }
- go handleConnection(conn)
- }
- }()
- return nil
- }
- func handleConnection(conn net.Conn) {
- defer conn.Close()
- buffer := make([]byte, bufferSize)
- for {
- n, err := conn.Read(buffer)
- if err != nil {
- if err == io.EOF {
- fmt.Printf("[eBPF Kernel Adapt] client connection closed: %v\n", err)
- return
- }
- fmt.Printf("[eBPF Kernel Adapt] Error reading from connection: %v\n", err)
- return
- }
- //if n == 0 {
- // *clientCount++
- // break
- //}
- request := strings.TrimSpace(string(buffer[:n]))
- fmt.Println(request)
- if request == "hello" {
- _, err := conn.Write([]byte("OK"))
- if err != nil {
- fmt.Printf("[eBPF Kernel Adapt] Error writing response: %v\n", err)
- break
- }
- }
- }
- }
- func kernelOffsetInferClient() error {
- conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", offsetInferServerAddr, offsetInferServerPort))
- if err != nil {
- return fmt.Errorf("failed to connect to server: %v", err)
- }
- defer conn.Close()
- fmt.Println("[eBPF Kernel Adapt] kernel_offset_infer_client started.")
- request := "hello"
- _, err = conn.Write([]byte(request))
- if err != nil {
- return fmt.Errorf("failed to send request to server: %v", err)
- }
- buffer := make([]byte, bufferSize)
- for {
- n, err := conn.Read(buffer)
- if err != nil {
- fmt.Printf("[eBPF Kernel Adapt] Error reading response from server: %v\n", err)
- break
- }
- if n == 0 {
- break
- }
- response := strings.TrimSpace(string(buffer[:n]))
- fmt.Println(response)
- if response == "OK" {
- break
- }
- }
- fmt.Println("[eBPF Kernel Adapt] kernel_offset_infer_client finished.")
- return nil
- }
|