summaryrefslogtreecommitdiff
path: root/internal/eventloop_exit.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-19 15:00:02 +0300
committerPaul Buetow <paul@buetow.org>2026-05-19 15:00:02 +0300
commit71ef23ae16b0e310e66f3bf622cebefb9ec6b208 (patch)
treed61bc007207fbd3f4e21de34874de0248692b9b2 /internal/eventloop_exit.go
parent9cc2c7b3c4c7a1f1837a4a5260f11ccea5814c83 (diff)
v6: add KindAccept and wire accept/accept4
Diffstat (limited to 'internal/eventloop_exit.go')
-rw-r--r--internal/eventloop_exit.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/internal/eventloop_exit.go b/internal/eventloop_exit.go
index c64515b..9953c13 100644
--- a/internal/eventloop_exit.go
+++ b/internal/eventloop_exit.go
@@ -30,6 +30,8 @@ func (e *eventLoop) handleTracepointExit(ep *event.Pair) bool {
return e.handleSocketExit(ep, ev)
case *types.SocketpairEvent:
return e.handleSocketpairExit(ep, ev)
+ case *types.AcceptEvent:
+ return e.handleAcceptExit(ep, ev)
case *types.NullEvent:
return e.handleNullExit(ep, ev)
case *types.FcntlEvent:
@@ -282,10 +284,44 @@ func (e *eventLoop) handleSocketpairExit(ep *event.Pair, socketpairEv *types.Soc
return true
}
+func (e *eventLoop) handleAcceptExit(ep *event.Pair, acceptEv *types.AcceptEvent) bool {
+ exitEv, ok := ep.ExitEv.(*types.AcceptEvent)
+ if !ok {
+ e.recyclePair(ep, "Dropped malformed accept exit event")
+ return false
+ }
+
+ listening := e.fdState().resolve(acceptEv.Fd, acceptEv.Pid)
+ if fd := int32(exitEv.Ret); fd >= 0 {
+ fdFile := file.NewFd(fd, acceptedSocketDescriptorName(listening), -1)
+ e.fdState().set(fd, fdFile)
+ ep.File = fdFile
+ } else {
+ ep.File = listening
+ }
+ ep.Comm = e.comm(acceptEv.GetTid())
+ if !e.Filter().MatchPair(ep) {
+ ep.Recycle()
+ return false
+ }
+ return true
+}
+
func socketDescriptorName(family, typ, protocol int32) string {
return fmt.Sprintf("socket:%d:%d:%d", family, typ, protocol)
}
+func acceptedSocketDescriptorName(listening file.File) string {
+ if listening == nil {
+ return "socket:accepted"
+ }
+ name := listening.Name()
+ if name == "" {
+ return "socket:accepted"
+ }
+ return name
+}
+
func (e *eventLoop) handleNullExit(ep *event.Pair, nullEv *types.NullEvent) bool {
if ep.Is(types.SYS_ENTER_IO_URING_SETUP) {
retEvent, ok := ep.ExitEv.(*types.RetEvent)