MCPcopy
hub / github.com/google/gvisor / Example

Function Example

pkg/flipcall/flipcall_example_test.go:24–113  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

22)
23
24func Example() {
25 const (
26 reqPrefix = "request "
27 respPrefix = "response "
28 count = 3
29 maxMessageLen = len(respPrefix) + 1 // 1 digit
30 )
31
32 pwa, err := NewPacketWindowAllocator()
33 if err != nil {
34 panic(err)
35 }
36 defer pwa.Destroy()
37 pwd, err := pwa.Allocate(PacketWindowLengthForDataCap(uint32(maxMessageLen)))
38 if err != nil {
39 panic(err)
40 }
41 var clientEP Endpoint
42 if err := clientEP.Init(ClientSide, pwd); err != nil {
43 panic(err)
44 }
45 defer clientEP.Destroy()
46 var serverEP Endpoint
47 if err := serverEP.Init(ServerSide, pwd); err != nil {
48 panic(err)
49 }
50 defer serverEP.Destroy()
51
52 var serverRun sync.WaitGroup
53 serverRun.Add(1)
54 go func() {
55 defer serverRun.Done()
56 i := 0
57 var buf bytes.Buffer
58 // wait for first request
59 n, err := serverEP.RecvFirst()
60 if err != nil {
61 return
62 }
63 for {
64 // read request
65 buf.Reset()
66 buf.Write(serverEP.Data()[:n])
67 fmt.Println(buf.String())
68 // write response
69 buf.Reset()
70 fmt.Fprintf(&buf, "%s%d", respPrefix, i)
71 copy(serverEP.Data(), buf.Bytes())
72 // send response and wait for next request
73 n, err = serverEP.SendRecv(uint32(buf.Len()))
74 if err != nil {
75 return
76 }
77 i++
78 }
79 }()
80 defer func() {
81 serverEP.Shutdown()

Callers

nothing calls this directly

Calls 15

DestroyMethod · 0.95
AllocateMethod · 0.95
InitMethod · 0.95
DestroyMethod · 0.95
RecvFirstMethod · 0.95
DataMethod · 0.95
SendRecvMethod · 0.95
ShutdownMethod · 0.95
ConnectMethod · 0.95
NewPacketWindowAllocatorFunction · 0.85
AddMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…