Go语言非阻塞套接字实现详解及示例代码
在Go语言中,可以使用net包来实现非阻塞套接字。下面是一个简单的示例代码:
package main
import (
"fmt"
"net"
"time"
)
func main() {
// 创建套接字
conn, err := net.Dial("tcp", "example.com:80")
if err != nil {
fmt.Println("Error connecting:", err)
return
}
defer conn.Close()
// 设置套接字为非阻塞模式
err = conn.SetDeadline(time.Now().Add(1 * time.Second))
if err != nil {
fmt.Println("Error setting deadline:", err)
return
}
// 发送数据
_, err = conn.Write([]byte("GET / HTTP/1.0\r\n\r\n"))
if err != nil {
fmt.Println("Error sending data:", err)
return
}
// 接收数据
buffer := make([]byte, 1024)
_, err = conn.Read(buffer)
if err != nil {
fmt.Println("Error receiving data:", err)
return
}
// 输出接收到的数据
fmt.Println(string(buffer))
}
在上面的示例中,我们首先创建了一个套接字连接到example.com:80。然后使用conn.SetDeadline()函数将套接字设置为非阻塞模式,并设置超时时间为1秒。接下来,我们发送一个HTTP请求并读取响应数据。最后,将接收到的数据输出到控制台。
请注意,设置非阻塞套接字后,读取和写入操作可能会立即返回,无论是否有数据可读或写入。因此,需要根据返回的错误来确定是否成功读取或写入数据。
原文地址: https://www.cveoy.top/t/topic/qEVx 著作权归作者所有。请勿转载和采集!