imap: fix build on macos
Fix the following build error on mac os:
worker/imap/worker.go:368:29: undefined: syscall.TCP_KEEPCNT
worker/imap/worker.go:376:29: undefined: syscall.TCP_KEEPINTVL
These symbols are not defined on darwin.
Fixes: 5dfeff75f3
("imap: add tcp connection options")
Signed-off-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
parent
175d0efeb2
commit
15a4cc7d0a
4 changed files with 36 additions and 7 deletions
|
@ -82,6 +82,9 @@ available:
|
|||
By default, the system tcp socket settings are used.
|
||||
If keepalive-period is specified, this option defaults to 3 probes.
|
||||
|
||||
This option is only supported on linux. On other platforms, it will be
|
||||
ignored.
|
||||
|
||||
*keepalive-interval*
|
||||
The interval between subsequential keepalive probes, regardless of what
|
||||
the connection has exchanged in the meantime. Fractional seconds are
|
||||
|
@ -90,6 +93,9 @@ available:
|
|||
By default, the system tcp socket settings are used.
|
||||
If keepalive-period is specified, this option defaults to 3s.
|
||||
|
||||
This option is only supported on linux. On other platforms, it will be
|
||||
ignored.
|
||||
|
||||
# SEE ALSO
|
||||
|
||||
*aerc*(1) *aerc-config*(5)
|
||||
|
|
11
lib/keepalive_dummy.go
Normal file
11
lib/keepalive_dummy.go
Normal file
|
@ -0,0 +1,11 @@
|
|||
//+build !linux
|
||||
|
||||
package lib
|
||||
|
||||
func SetTcpKeepaliveProbes(fd, count int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func SetTcpKeepaliveInterval(fd, interval int) error {
|
||||
return nil
|
||||
}
|
17
lib/keepalive_linux.go
Normal file
17
lib/keepalive_linux.go
Normal file
|
@ -0,0 +1,17 @@
|
|||
//+build linux
|
||||
|
||||
package lib
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
)
|
||||
|
||||
func SetTcpKeepaliveProbes(fd, count int) error {
|
||||
return syscall.SetsockoptInt(
|
||||
fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPCNT, count)
|
||||
}
|
||||
|
||||
func SetTcpKeepaliveInterval(fd, interval int) error {
|
||||
return syscall.SetsockoptInt(
|
||||
fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL, interval)
|
||||
}
|
|
@ -7,7 +7,6 @@ import (
|
|||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/emersion/go-imap"
|
||||
|
@ -364,17 +363,13 @@ func (w *IMAPWorker) setKeepaliveParameters(conn *net.TCPConn) error {
|
|||
err = rawConn.Control(func(fdPtr uintptr) {
|
||||
fd := int(fdPtr)
|
||||
// Max number of probes before failure
|
||||
err := syscall.SetsockoptInt(
|
||||
fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPCNT,
|
||||
w.config.keepalive_probes)
|
||||
err := lib.SetTcpKeepaliveProbes(fd, w.config.keepalive_probes)
|
||||
if err != nil {
|
||||
w.worker.Logger.Printf(
|
||||
"cannot set tcp keepalive probes: %v\n", err)
|
||||
}
|
||||
// Wait time after an unsuccessful probe
|
||||
err = syscall.SetsockoptInt(
|
||||
fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL,
|
||||
w.config.keepalive_interval)
|
||||
err = lib.SetTcpKeepaliveInterval(fd, w.config.keepalive_interval)
|
||||
if err != nil {
|
||||
w.worker.Logger.Printf(
|
||||
"cannot set tcp keepalive interval: %v\n", err)
|
||||
|
|
Loading…
Reference in a new issue