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.
|
By default, the system tcp socket settings are used.
|
||||||
If keepalive-period is specified, this option defaults to 3 probes.
|
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*
|
*keepalive-interval*
|
||||||
The interval between subsequential keepalive probes, regardless of what
|
The interval between subsequential keepalive probes, regardless of what
|
||||||
the connection has exchanged in the meantime. Fractional seconds are
|
the connection has exchanged in the meantime. Fractional seconds are
|
||||||
|
@ -90,6 +93,9 @@ available:
|
||||||
By default, the system tcp socket settings are used.
|
By default, the system tcp socket settings are used.
|
||||||
If keepalive-period is specified, this option defaults to 3s.
|
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
|
# SEE ALSO
|
||||||
|
|
||||||
*aerc*(1) *aerc-config*(5)
|
*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"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/emersion/go-imap"
|
"github.com/emersion/go-imap"
|
||||||
|
@ -364,17 +363,13 @@ func (w *IMAPWorker) setKeepaliveParameters(conn *net.TCPConn) error {
|
||||||
err = rawConn.Control(func(fdPtr uintptr) {
|
err = rawConn.Control(func(fdPtr uintptr) {
|
||||||
fd := int(fdPtr)
|
fd := int(fdPtr)
|
||||||
// Max number of probes before failure
|
// Max number of probes before failure
|
||||||
err := syscall.SetsockoptInt(
|
err := lib.SetTcpKeepaliveProbes(fd, w.config.keepalive_probes)
|
||||||
fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPCNT,
|
|
||||||
w.config.keepalive_probes)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.worker.Logger.Printf(
|
w.worker.Logger.Printf(
|
||||||
"cannot set tcp keepalive probes: %v\n", err)
|
"cannot set tcp keepalive probes: %v\n", err)
|
||||||
}
|
}
|
||||||
// Wait time after an unsuccessful probe
|
// Wait time after an unsuccessful probe
|
||||||
err = syscall.SetsockoptInt(
|
err = lib.SetTcpKeepaliveInterval(fd, w.config.keepalive_interval)
|
||||||
fd, syscall.IPPROTO_TCP, syscall.TCP_KEEPINTVL,
|
|
||||||
w.config.keepalive_interval)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.worker.Logger.Printf(
|
w.worker.Logger.Printf(
|
||||||
"cannot set tcp keepalive interval: %v\n", err)
|
"cannot set tcp keepalive interval: %v\n", err)
|
||||||
|
|
Loading…
Reference in a new issue