package main
import (
"fmt"
"golang.org/x/sys/unix"
"net"
"os"
"syscall"
"time"
)
func main() {
// 创建多个网络连接
conn1, _ := net.Dial("tcp", "localhost:8000")
conn2, _ := net.Dial("tcp", "localhost:8001")
conn3, _ := net.Dial("tcp", "localhost:8002")
//获取文件描述符
fd1 := getFD(conn1)
fd2 := getFD(conn2)
fd3 := getFD(conn3)
// 使用Poll系统调用实现IO多路复用
start := time.Now()
fds := []unix.PollFd{{Fd: int32(fd1), Events: unix.POLLIN},
{Fd: int32(fd2), Events: unix.POLLIN},
{Fd: int32(fd3), Events: unix.POLLIN}}
for true {
n, err := unix.Poll(fds, 1000)
for _, fd := range fds {
if fd.Revents&unix.POLLIN == unix.POLLIN {
fmt.Printf("n=%d err=%v delay=%v flags=%016b (POLLIN=%t)\n",
n, err, time.Since(start), fd.Revents, fd.Revents&unix.POLLIN != 0)
handleConn(uintptr(fd.Fd))
}
}
}
}
go语言使用系统调用 poll
最新推荐文章于 2024-08-07 16:20:51 发布