added a function to get the monotonic time
This commit is contained in:
parent
464a550c68
commit
de113d150f
4
Makefile
4
Makefile
@ -13,7 +13,9 @@ SRCS=\
|
|||||||
server.go \
|
server.go \
|
||||||
server-ctl.go \
|
server-ctl.go \
|
||||||
server-peer.go \
|
server-peer.go \
|
||||||
server-ws.go
|
server-ws.go \
|
||||||
|
system-freebsd.go \
|
||||||
|
system-linux.go
|
||||||
|
|
||||||
CMD_DATA=\
|
CMD_DATA=\
|
||||||
cmd/tls.crt \
|
cmd/tls.crt \
|
||||||
|
@ -1100,7 +1100,8 @@ func (s *Server) AddNewServerConn(remote_addr *net.Addr, local_addr *net.Addr, p
|
|||||||
return nil, fmt.Errorf("too many connections - %d", s.cts_limit)
|
return nil, fmt.Errorf("too many connections - %d", s.cts_limit)
|
||||||
}
|
}
|
||||||
|
|
||||||
id = rand.Uint32()
|
id = uint32(monotonic_time())
|
||||||
|
//id = rand.Uint32()
|
||||||
for {
|
for {
|
||||||
_, ok = s.cts_map[id]
|
_, ok = s.cts_map[id]
|
||||||
if !ok { break }
|
if !ok { break }
|
||||||
|
22
system-freebsd.go
Normal file
22
system-freebsd.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//go:build freebsd
|
||||||
|
|
||||||
|
package hodu
|
||||||
|
|
||||||
|
import "syscall"
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
//#include <time.h>
|
||||||
|
//import "C"
|
||||||
|
|
||||||
|
// C.CLOCK_MONOTONIC is more accurate when compiled with CGO.
|
||||||
|
// I want to avoid using it. so assume it is 1 on linux
|
||||||
|
//const FREEBSD_CLOCK_MONOTONIC uintptr = C.CLOCK_MONOTONIC
|
||||||
|
const CLOCK_MONOTONIC uintptr = 4
|
||||||
|
|
||||||
|
func monotonic_time() uint64 {
|
||||||
|
var ts syscall.Timespec
|
||||||
|
var errno syscall.Errno
|
||||||
|
_, _, errno = syscall.Syscall(syscall.SYS_CLOCK_GETTIME, CLOCK_MONOTONIC, uintptr(unsafe.Pointer(&ts)), 0)
|
||||||
|
if errno != 0 { return 0 }
|
||||||
|
return uint64(ts.Nano())
|
||||||
|
}
|
22
system-linux.go
Normal file
22
system-linux.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//go:build linux
|
||||||
|
|
||||||
|
package hodu
|
||||||
|
|
||||||
|
import "syscall"
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
//#include <time.h>
|
||||||
|
//import "C"
|
||||||
|
|
||||||
|
// C.CLOCK_MONOTONIC is more accurate when compiled with CGO.
|
||||||
|
// I want to avoid using it. so assume it is 1 on linux
|
||||||
|
//const CLOCK_MONOTONIC uintptr = C.CLOCK_MONOTONIC
|
||||||
|
const CLOCK_MONOTONIC uintptr = 1
|
||||||
|
|
||||||
|
func monotonic_time() uint64 {
|
||||||
|
var ts syscall.Timespec
|
||||||
|
var errno syscall.Errno
|
||||||
|
_, _, errno = syscall.Syscall(syscall.SYS_CLOCK_GETTIME, CLOCK_MONOTONIC, uintptr(unsafe.Pointer(&ts)), 0)
|
||||||
|
if errno != 0 { return 0 }
|
||||||
|
return uint64(ts.Nano())
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user