llgo/c/hyper_related

This commit is contained in:
赵英杰
2024-07-18 10:28:14 +08:00
parent 519c850f17
commit 254acbbbe2
11 changed files with 105 additions and 138 deletions

View File

@@ -2,32 +2,32 @@ package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/fddef"
"github.com/goplus/llgo/c/os"
_select "github.com/goplus/llgo/c/select"
"github.com/goplus/llgo/c/sys"
"github.com/goplus/llgo/c/syscall"
"unsafe"
)
func main() {
var readFds fddef.FdSet
var readFds syscall.FdSet
fddef.FdZero(&readFds)
sys.FD_ZERO(&readFds)
fddef.Fdset(0, &readFds)
sys.FD_SET(0, &readFds)
var tv _select.TimeVal
var tv sys.TimeVal
tv.TvSec = 5
tv.TvUSec = 0
c.Printf(c.Str("Waiting for input on stdin...\n"))
ret := _select.Select(1, &readFds, nil, nil, &tv)
ret := sys.Select(1, &readFds, nil, nil, &tv)
if ret == -1 {
c.Perror(c.Str("select error"))
c.Exit(1)
} else if ret == 0 {
c.Printf(c.Str("Timeout occurred! No data after 5 seconds.\n"))
} else {
if fddef.FdIsset(0, &readFds) != 0 {
if sys.FD_ISSET(0, &readFds) != 0 {
var buffer [100]c.Char
n := os.Read(0, c.Pointer(&buffer[:][0]), unsafe.Sizeof(buffer)-1)
if n == -1 {

View File

@@ -2,28 +2,28 @@ package main
import (
"github.com/goplus/llgo/c"
"github.com/goplus/llgo/c/fddef"
"github.com/goplus/llgo/c/net"
"github.com/goplus/llgo/c/os"
_select "github.com/goplus/llgo/c/select"
"github.com/goplus/llgo/c/socket"
"github.com/goplus/llgo/c/sys"
"github.com/goplus/llgo/c/syscall"
"unsafe"
)
const (
SERVER_IP = "110.242.68.66" // Get the IP address by ping baidu.com
SERVER_IP = "110.242.68.66" // Get the IP address by ping baidu.com
SERVER_PORT = 80
BUFFER_SIZE = 4096 * 1024
)
func main() {
var server socket.SockaddrIn
var server net.SockaddrIn
sendBuf := c.Str("GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n")
var recvBuf [BUFFER_SIZE]c.Char
var bytes_sent, bytes_received c.Int
// create socket
sock := socket.Socket(socket.AF_INET, socket.SOCK_STREAM, 0)
// create net
sock := net.Socket(net.AF_INET, net.SOCK_STREAM, 0)
if sock < 0 {
c.Perror(c.Str("Socket creation failed"))
return
@@ -31,28 +31,28 @@ func main() {
// set server addr
c.Memset(c.Pointer(&server), 0, unsafe.Sizeof(server))
server.Family = socket.AF_INET
server.Port = socket.Htons(SERVER_PORT)
server.Addr.Addr = socket.InetAddr(c.Str(SERVER_IP))
server.Family = net.AF_INET
server.Port = net.Htons(SERVER_PORT)
server.Addr.Addr = net.InetAddr(c.Str(SERVER_IP))
// connect to server
if socket.Connect(sock, (*socket.SockAddr)(c.Pointer(&server)), c.Uint(unsafe.Sizeof(server))) < 0 {
if net.Connect(sock, (*net.SockAddr)(c.Pointer(&server)), c.Uint(unsafe.Sizeof(server))) < 0 {
c.Perror(c.Str("Connect failed"))
return
}
var writefds, readfds fddef.FdSet
var timeout _select.TimeVal
var writefds, readfds syscall.FdSet
var timeout sys.TimeVal
// Monitor socket writes
fddef.FdZero(&writefds)
fddef.Fdset(sock, &writefds)
sys.FD_ZERO(&writefds)
sys.FD_SET(sock, &writefds)
timeout.TvSec = 10
timeout.TvUSec = 0
// Use select to monitor the readiness of writes
if _select.Select(sock+1, nil, &writefds, nil, &timeout) > 0 {
if fddef.FdIsset(sock, &writefds) != 0 {
bytes_sent = c.Int(socket.Send(sock, c.Pointer(sendBuf), c.Strlen(sendBuf), 0))
if sys.Select(sock+1, nil, &writefds, nil, &timeout) > 0 {
if sys.FD_ISSET(sock, &writefds) != 0 {
bytes_sent = c.Int(net.Send(sock, c.Pointer(sendBuf), c.Strlen(sendBuf), 0))
if bytes_sent < 0 {
c.Perror(c.Str("send failed"))
return
@@ -64,13 +64,13 @@ func main() {
}
// Monitor socket reads
fddef.FdZero(&readfds)
fddef.Fdset(sock, &readfds)
sys.FD_ZERO(&readfds)
sys.FD_SET(sock, &readfds)
// Use select to monitor the readiness of the read operation
if _select.Select(sock+1, &readfds, nil, nil, &timeout) > 0 {
if fddef.FdIsset(sock, &writefds) != -1 {
bytes_received = c.Int(socket.Recv(sock, c.Pointer(&recvBuf[:][0]), BUFFER_SIZE-1, 0))
if sys.Select(sock+1, &readfds, nil, nil, &timeout) > 0 {
if sys.FD_ISSET(sock, &writefds) != -1 {
bytes_received = c.Int(net.Recv(sock, c.Pointer(&recvBuf[:][0]), BUFFER_SIZE-1, 0))
if bytes_received < 0 {
c.Perror(c.Str("receive failed"))
return
@@ -84,4 +84,4 @@ func main() {
}
os.Close(sock)
}
}