Skip to content

Commit

Permalink
Merge pull request #16 from pmorjan/listen-deadline
Browse files Browse the repository at this point in the history
vsock: enable timeouts also on listener connections
  • Loading branch information
mdlayher committed Aug 6, 2018
2 parents 0976713 + d8b0f13 commit e73e6ad
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 19 deletions.
6 changes: 6 additions & 0 deletions listener_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ func (l *listener) Accept() (net.Conn, error) {
Port: savm.Port,
}

// Enable integration with runtime network poller for timeout support
// in Go 1.11+.
if err := cfd.SetNonblock(true); err != nil {
return nil, err
}

return &conn{
file: cfd.NewFile(l.addr.fileName()),
localAddr: l.addr,
Expand Down
49 changes: 30 additions & 19 deletions listener_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,30 +76,34 @@ func Test_listenStreamLinuxFull(t *testing.T) {
Port: port,
}

bindFn := func(sa unix.Sockaddr) error {
if want, got := lsa, sa; !reflect.DeepEqual(want, got) {
t.Fatalf("unexpected bind sockaddr:\n- want: %#v\n- got: %#v",
want, got)
}

return nil
}

listenFn := func(n int) error {
if want, got := listenBacklog, n; want != got {
t.Fatalf("unexpected listen backlog:\n- want: %d\n- got: %d",
want, got)
}
lfd := &testFD{
bind: func(sa unix.Sockaddr) error {
if want, got := lsa, sa; !reflect.DeepEqual(want, got) {
t.Fatalf("unexpected bind sockaddr:\n- want: %#v\n- got: %#v",
want, got)
}

return nil
}
return nil
},
listen: func(n int) error {
if want, got := listenBacklog, n; want != got {
t.Fatalf("unexpected listen backlog:\n- want: %d\n- got: %d",
want, got)
}

lfd := &testFD{
bind: bindFn,
listen: listenFn,
return nil
},
getsockname: func() (unix.Sockaddr, error) {
return lsa, nil
},
setNonblock: func(nonblocking bool) error {
if want, got := true, nonblocking; !reflect.DeepEqual(want, got) {
t.Fatalf("unexpected set nonblocking value:\n- want: %#v\n- got: %#v",
want, got)
}

return nil
},
}

nl, err := listenStreamLinux(lfd, cid, port)
Expand Down Expand Up @@ -137,6 +141,13 @@ func Test_listenerAccept(t *testing.T) {
newFile: func(name string) *os.File {
return os.NewFile(connFD, name)
},
setNonblock: func(nonblocking bool) error {
if want, got := true, nonblocking; !reflect.DeepEqual(want, got) {
t.Fatalf("unexpected set nonblocking value:\n- want: %#v\n- got: %#v",
want, got)
}
return nil
},
}

acceptSA := &unix.SockaddrVM{
Expand Down

0 comments on commit e73e6ad

Please sign in to comment.