added a function to get the monotonic time

This commit is contained in:
hyung-hwan 2024-12-09 19:04:22 +09:00
parent 464a550c68
commit de113d150f
4 changed files with 49 additions and 2 deletions

View File

@ -13,7 +13,9 @@ SRCS=\
server.go \
server-ctl.go \
server-peer.go \
server-ws.go
server-ws.go \
system-freebsd.go \
system-linux.go
CMD_DATA=\
cmd/tls.crt \

View File

@ -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)
}
id = rand.Uint32()
id = uint32(monotonic_time())
//id = rand.Uint32()
for {
_, ok = s.cts_map[id]
if !ok { break }

22
system-freebsd.go Normal file
View 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
View 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())
}