llgo/c/hyper_related
This commit is contained in:
@@ -2,20 +2,19 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/goplus/llgo/c"
|
"github.com/goplus/llgo/c"
|
||||||
"github.com/goplus/llgo/c/netdb"
|
"github.com/goplus/llgo/c/net"
|
||||||
"github.com/goplus/llgo/c/socket"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var hints netdb.AddrInfo
|
var hints net.AddrInfo
|
||||||
hints.AiFamily = socket.AF_UNSPEC
|
hints.AiFamily = net.AF_UNSPEC
|
||||||
hints.AiSockType = socket.SOCK_STREAM
|
hints.AiSockType = net.SOCK_STREAM
|
||||||
|
|
||||||
host := "httpbin.org"
|
host := "httpbin.org"
|
||||||
port := "80"
|
port := "80"
|
||||||
|
|
||||||
var result *netdb.AddrInfo
|
var result *net.AddrInfo
|
||||||
c.Printf(c.Str("%d\n"), netdb.Getaddrinfo(c.Str(host), c.Str(port), &hints, &result))
|
c.Printf(c.Str("%d\n"), net.Getaddrinfo(c.Str(host), c.Str(port), &hints, &result))
|
||||||
|
|
||||||
c.Printf(c.Str("%d\n"), netdb.Freeaddrinfo(result))
|
c.Printf(c.Str("%d\n"), net.Freeaddrinfo(result))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,32 +2,32 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/goplus/llgo/c"
|
"github.com/goplus/llgo/c"
|
||||||
"github.com/goplus/llgo/c/fddef"
|
|
||||||
"github.com/goplus/llgo/c/os"
|
"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"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
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.TvSec = 5
|
||||||
tv.TvUSec = 0
|
tv.TvUSec = 0
|
||||||
|
|
||||||
c.Printf(c.Str("Waiting for input on stdin...\n"))
|
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 {
|
if ret == -1 {
|
||||||
c.Perror(c.Str("select error"))
|
c.Perror(c.Str("select error"))
|
||||||
c.Exit(1)
|
c.Exit(1)
|
||||||
} else if ret == 0 {
|
} else if ret == 0 {
|
||||||
c.Printf(c.Str("Timeout occurred! No data after 5 seconds.\n"))
|
c.Printf(c.Str("Timeout occurred! No data after 5 seconds.\n"))
|
||||||
} else {
|
} else {
|
||||||
if fddef.FdIsset(0, &readFds) != 0 {
|
if sys.FD_ISSET(0, &readFds) != 0 {
|
||||||
var buffer [100]c.Char
|
var buffer [100]c.Char
|
||||||
n := os.Read(0, c.Pointer(&buffer[:][0]), unsafe.Sizeof(buffer)-1)
|
n := os.Read(0, c.Pointer(&buffer[:][0]), unsafe.Sizeof(buffer)-1)
|
||||||
if n == -1 {
|
if n == -1 {
|
||||||
|
|||||||
@@ -2,28 +2,28 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/goplus/llgo/c"
|
"github.com/goplus/llgo/c"
|
||||||
"github.com/goplus/llgo/c/fddef"
|
"github.com/goplus/llgo/c/net"
|
||||||
"github.com/goplus/llgo/c/os"
|
"github.com/goplus/llgo/c/os"
|
||||||
_select "github.com/goplus/llgo/c/select"
|
"github.com/goplus/llgo/c/sys"
|
||||||
"github.com/goplus/llgo/c/socket"
|
"github.com/goplus/llgo/c/syscall"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
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
|
SERVER_PORT = 80
|
||||||
BUFFER_SIZE = 4096 * 1024
|
BUFFER_SIZE = 4096 * 1024
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
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")
|
sendBuf := c.Str("GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n")
|
||||||
var recvBuf [BUFFER_SIZE]c.Char
|
var recvBuf [BUFFER_SIZE]c.Char
|
||||||
var bytes_sent, bytes_received c.Int
|
var bytes_sent, bytes_received c.Int
|
||||||
|
|
||||||
// create socket
|
// create net
|
||||||
sock := socket.Socket(socket.AF_INET, socket.SOCK_STREAM, 0)
|
sock := net.Socket(net.AF_INET, net.SOCK_STREAM, 0)
|
||||||
if sock < 0 {
|
if sock < 0 {
|
||||||
c.Perror(c.Str("Socket creation failed"))
|
c.Perror(c.Str("Socket creation failed"))
|
||||||
return
|
return
|
||||||
@@ -31,28 +31,28 @@ func main() {
|
|||||||
|
|
||||||
// set server addr
|
// set server addr
|
||||||
c.Memset(c.Pointer(&server), 0, unsafe.Sizeof(server))
|
c.Memset(c.Pointer(&server), 0, unsafe.Sizeof(server))
|
||||||
server.Family = socket.AF_INET
|
server.Family = net.AF_INET
|
||||||
server.Port = socket.Htons(SERVER_PORT)
|
server.Port = net.Htons(SERVER_PORT)
|
||||||
server.Addr.Addr = socket.InetAddr(c.Str(SERVER_IP))
|
server.Addr.Addr = net.InetAddr(c.Str(SERVER_IP))
|
||||||
|
|
||||||
// connect to server
|
// 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"))
|
c.Perror(c.Str("Connect failed"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var writefds, readfds fddef.FdSet
|
var writefds, readfds syscall.FdSet
|
||||||
var timeout _select.TimeVal
|
var timeout sys.TimeVal
|
||||||
|
|
||||||
// Monitor socket writes
|
// Monitor socket writes
|
||||||
fddef.FdZero(&writefds)
|
sys.FD_ZERO(&writefds)
|
||||||
fddef.Fdset(sock, &writefds)
|
sys.FD_SET(sock, &writefds)
|
||||||
timeout.TvSec = 10
|
timeout.TvSec = 10
|
||||||
timeout.TvUSec = 0
|
timeout.TvUSec = 0
|
||||||
// Use select to monitor the readiness of writes
|
// Use select to monitor the readiness of writes
|
||||||
if _select.Select(sock+1, nil, &writefds, nil, &timeout) > 0 {
|
if sys.Select(sock+1, nil, &writefds, nil, &timeout) > 0 {
|
||||||
if fddef.FdIsset(sock, &writefds) != 0 {
|
if sys.FD_ISSET(sock, &writefds) != 0 {
|
||||||
bytes_sent = c.Int(socket.Send(sock, c.Pointer(sendBuf), c.Strlen(sendBuf), 0))
|
bytes_sent = c.Int(net.Send(sock, c.Pointer(sendBuf), c.Strlen(sendBuf), 0))
|
||||||
if bytes_sent < 0 {
|
if bytes_sent < 0 {
|
||||||
c.Perror(c.Str("send failed"))
|
c.Perror(c.Str("send failed"))
|
||||||
return
|
return
|
||||||
@@ -64,13 +64,13 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Monitor socket reads
|
// Monitor socket reads
|
||||||
fddef.FdZero(&readfds)
|
sys.FD_ZERO(&readfds)
|
||||||
fddef.Fdset(sock, &readfds)
|
sys.FD_SET(sock, &readfds)
|
||||||
|
|
||||||
// Use select to monitor the readiness of the read operation
|
// Use select to monitor the readiness of the read operation
|
||||||
if _select.Select(sock+1, &readfds, nil, nil, &timeout) > 0 {
|
if sys.Select(sock+1, &readfds, nil, nil, &timeout) > 0 {
|
||||||
if fddef.FdIsset(sock, &writefds) != -1 {
|
if sys.FD_ISSET(sock, &writefds) != -1 {
|
||||||
bytes_received = c.Int(socket.Recv(sock, c.Pointer(&recvBuf[:][0]), BUFFER_SIZE-1, 0))
|
bytes_received = c.Int(net.Recv(sock, c.Pointer(&recvBuf[:][0]), BUFFER_SIZE-1, 0))
|
||||||
if bytes_received < 0 {
|
if bytes_received < 0 {
|
||||||
c.Perror(c.Str("receive failed"))
|
c.Perror(c.Str("receive failed"))
|
||||||
return
|
return
|
||||||
@@ -84,4 +84,4 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
os.Close(sock)
|
os.Close(sock)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,27 +4,27 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goplus/llgo/c"
|
"github.com/goplus/llgo/c"
|
||||||
|
"github.com/goplus/llgo/c/net"
|
||||||
"github.com/goplus/llgo/c/os"
|
"github.com/goplus/llgo/c/os"
|
||||||
"github.com/goplus/llgo/c/socket"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
sockfd := socket.Socket(socket.AF_INET, socket.SOCK_STREAM, 0)
|
sockfd := net.Socket(net.AF_INET, net.SOCK_STREAM, 0)
|
||||||
msg := c.Str("Hello, World!")
|
msg := c.Str("Hello, World!")
|
||||||
defer os.Close(sockfd)
|
defer os.Close(sockfd)
|
||||||
|
|
||||||
server := socket.GetHostByName(c.Str("localhost"))
|
server := net.GetHostByName(c.Str("localhost"))
|
||||||
if server == nil {
|
if server == nil {
|
||||||
c.Perror(c.Str("hostname get error"))
|
c.Perror(c.Str("hostname get error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
servAddr := &socket.SockaddrIn{}
|
servAddr := &net.SockaddrIn{}
|
||||||
servAddr.Family = socket.AF_INET
|
servAddr.Family = net.AF_INET
|
||||||
servAddr.Port = socket.Htons(uint16(1234))
|
servAddr.Port = net.Htons(uint16(1234))
|
||||||
c.Memcpy(unsafe.Pointer(&servAddr.Addr.Addr), unsafe.Pointer(*server.AddrList), uintptr(server.Length))
|
c.Memcpy(unsafe.Pointer(&servAddr.Addr.Addr), unsafe.Pointer(*server.AddrList), uintptr(server.Length))
|
||||||
|
|
||||||
if res := socket.Connect(sockfd, (*socket.SockAddr)(unsafe.Pointer(servAddr)), c.Uint(16)); res < 0 {
|
if res := net.Connect(sockfd, (*net.SockAddr)(unsafe.Pointer(servAddr)), c.Uint(16)); res < 0 {
|
||||||
c.Perror(c.Str("connect error"))
|
c.Perror(c.Str("connect error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,36 +4,36 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/goplus/llgo/c"
|
"github.com/goplus/llgo/c"
|
||||||
|
"github.com/goplus/llgo/c/net"
|
||||||
"github.com/goplus/llgo/c/os"
|
"github.com/goplus/llgo/c/os"
|
||||||
"github.com/goplus/llgo/c/socket"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var buffer [256]c.Char
|
var buffer [256]c.Char
|
||||||
|
|
||||||
sockfd := socket.Socket(socket.AF_INET, socket.SOCK_STREAM, 0)
|
sockfd := net.Socket(net.AF_INET, net.SOCK_STREAM, 0)
|
||||||
defer os.Close(sockfd)
|
defer os.Close(sockfd)
|
||||||
|
|
||||||
servAddr := &socket.SockaddrIn{
|
servAddr := &net.SockaddrIn{
|
||||||
Family: socket.AF_INET,
|
Family: net.AF_INET,
|
||||||
Port: socket.Htons(uint16(1234)),
|
Port: net.Htons(uint16(1234)),
|
||||||
Addr: socket.InAddr{Addr: 0x00000000},
|
Addr: net.InAddr{Addr: 0x00000000},
|
||||||
Zero: [8]c.Char{0, 0, 0, 0, 0, 0, 0, 0},
|
Zero: [8]c.Char{0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
}
|
}
|
||||||
if res := socket.Bind(sockfd, servAddr, c.Uint(unsafe.Sizeof(*servAddr))); res < 0 {
|
if res := net.Bind(sockfd, servAddr, c.Uint(unsafe.Sizeof(*servAddr))); res < 0 {
|
||||||
c.Perror(c.Str("bind error"))
|
c.Perror(c.Str("bind error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if socket.Listen(sockfd, 5) < 0 {
|
if net.Listen(sockfd, 5) < 0 {
|
||||||
c.Printf(c.Str("listen error"))
|
c.Printf(c.Str("listen error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.Printf(c.Str("Listening on port 1234...\n"))
|
c.Printf(c.Str("Listening on port 1234...\n"))
|
||||||
|
|
||||||
cliAddr, clilen := &socket.SockaddrIn{}, c.Uint(unsafe.Sizeof(servAddr))
|
cliAddr, clilen := &net.SockaddrIn{}, c.Uint(unsafe.Sizeof(servAddr))
|
||||||
|
|
||||||
newsockfd := socket.Accept(sockfd, cliAddr, &clilen)
|
newsockfd := net.Accept(sockfd, cliAddr, &clilen)
|
||||||
defer os.Close(newsockfd)
|
defer os.Close(newsockfd)
|
||||||
c.Printf(c.Str("Connection accepted."))
|
c.Printf(c.Str("Connection accepted."))
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
package fddef
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/goplus/llgo/c"
|
|
||||||
_ "unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
LLGoFiles = "_wrap/fddef.c"
|
|
||||||
LLGoPackage = "link: c"
|
|
||||||
)
|
|
||||||
|
|
||||||
type FdSet struct {
|
|
||||||
Unused [8]byte
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:linkname FdZero C.fd_zero
|
|
||||||
func FdZero(fdSet *FdSet)
|
|
||||||
|
|
||||||
//go:linkname Fdset C.fdSet
|
|
||||||
func Fdset(fd c.Int, fdSet *FdSet)
|
|
||||||
|
|
||||||
//go:linkname FdIsset C.fd_isset
|
|
||||||
func FdIsset(fd c.Int, fdSet *FdSet) c.Int
|
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package socket
|
package net
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "unsafe"
|
_ "unsafe"
|
||||||
@@ -101,7 +101,6 @@ type SockAddr struct {
|
|||||||
Data [14]c.Char
|
Data [14]c.Char
|
||||||
}
|
}
|
||||||
|
|
||||||
// (TODO) merge to netdb
|
|
||||||
type Hostent struct {
|
type Hostent struct {
|
||||||
Name *c.Char // official name of host
|
Name *c.Char // official name of host
|
||||||
Aliases **c.Char // null-terminated array of alternate names for the host
|
Aliases **c.Char // null-terminated array of alternate names for the host
|
||||||
@@ -110,6 +109,17 @@ type Hostent struct {
|
|||||||
AddrList **c.Char // null-terminated array of addresses for the host
|
AddrList **c.Char // null-terminated array of addresses for the host
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AddrInfo struct {
|
||||||
|
AiFlags c.Int
|
||||||
|
AiFamily c.Int
|
||||||
|
AiSockType c.Int
|
||||||
|
AiProtocol c.Int
|
||||||
|
AiAddrLen c.Uint
|
||||||
|
AiCanOnName *c.Char
|
||||||
|
AiAddr *SockAddr
|
||||||
|
AiNext *AddrInfo
|
||||||
|
}
|
||||||
|
|
||||||
//go:linkname Socket C.socket
|
//go:linkname Socket C.socket
|
||||||
func Socket(domain c.Int, typ c.Int, protocol c.Int) c.Int
|
func Socket(domain c.Int, typ c.Int, protocol c.Int) c.Int
|
||||||
|
|
||||||
@@ -125,8 +135,6 @@ func Listen(sockfd c.Int, backlog c.Int) c.Int
|
|||||||
//go:linkname Accept C.accept
|
//go:linkname Accept C.accept
|
||||||
func Accept(sockfd c.Int, addr *SockaddrIn, addrlen *c.Uint) c.Int
|
func Accept(sockfd c.Int, addr *SockaddrIn, addrlen *c.Uint) c.Int
|
||||||
|
|
||||||
// (TODO) merge to netdb
|
|
||||||
//
|
|
||||||
//go:linkname GetHostByName C.gethostbyname
|
//go:linkname GetHostByName C.gethostbyname
|
||||||
func GetHostByName(name *c.Char) *Hostent
|
func GetHostByName(name *c.Char) *Hostent
|
||||||
|
|
||||||
@@ -143,8 +151,6 @@ func Htons(x uint16) uint16 {
|
|||||||
return SwapInt16(x)
|
return SwapInt16(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
// (TODO) merge to netdb
|
|
||||||
//
|
|
||||||
//go:linkname InetAddr C.inet_addr
|
//go:linkname InetAddr C.inet_addr
|
||||||
func InetAddr(s *c.Char) c.Uint
|
func InetAddr(s *c.Char) c.Uint
|
||||||
|
|
||||||
@@ -153,3 +159,9 @@ func Send(c.Int, c.Pointer, uintptr, c.Int) c.Long
|
|||||||
|
|
||||||
//go:linkname Recv C.recv
|
//go:linkname Recv C.recv
|
||||||
func Recv(c.Int, c.Pointer, uintptr, c.Int) c.Long
|
func Recv(c.Int, c.Pointer, uintptr, c.Int) c.Long
|
||||||
|
|
||||||
|
//go:linkname Getaddrinfo C.getaddrinfo
|
||||||
|
func Getaddrinfo(host *c.Char, port *c.Char, addrInfo *AddrInfo, result **AddrInfo) c.Int
|
||||||
|
|
||||||
|
//go:linkname Freeaddrinfo C.freeaddrinfo
|
||||||
|
func Freeaddrinfo(addrInfo *AddrInfo) c.Int
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
package netdb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/goplus/llgo/c/socket"
|
|
||||||
_ "unsafe"
|
|
||||||
|
|
||||||
"github.com/goplus/llgo/c"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
LLGoPackage = "decl"
|
|
||||||
)
|
|
||||||
|
|
||||||
type AddrInfo struct {
|
|
||||||
AiFlags c.Int
|
|
||||||
AiFamily c.Int
|
|
||||||
AiSockType c.Int
|
|
||||||
AiProtocol c.Int
|
|
||||||
AiAddrLen c.Uint
|
|
||||||
AiCanOnName *c.Char
|
|
||||||
AiAddr *socket.SockAddr
|
|
||||||
AiNext *AddrInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:linkname Getaddrinfo C.getaddrinfo
|
|
||||||
func Getaddrinfo(host *c.Char, port *c.Char, addrInfo *AddrInfo, result **AddrInfo) c.Int
|
|
||||||
|
|
||||||
//go:linkname Freeaddrinfo C.freeaddrinfo
|
|
||||||
func Freeaddrinfo(addrInfo *AddrInfo) c.Int
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
package _select
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/goplus/llgo/c/fddef"
|
|
||||||
_ "unsafe"
|
|
||||||
|
|
||||||
"github.com/goplus/llgo/c"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
LLGoPackage = "decl"
|
|
||||||
)
|
|
||||||
|
|
||||||
// (TODO) merge to timeval
|
|
||||||
//
|
|
||||||
type TimeVal struct {
|
|
||||||
TvSec c.Long
|
|
||||||
TvUSec c.Int
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:linkname Select C.select
|
|
||||||
func Select(n c.Int, r *fddef.FdSet, w *fddef.FdSet, e *fddef.FdSet, timeout *TimeVal) c.Int
|
|
||||||
31
c/sys/select.go
Normal file
31
c/sys/select.go
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package sys
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/goplus/llgo/c/syscall"
|
||||||
|
_ "unsafe"
|
||||||
|
|
||||||
|
"github.com/goplus/llgo/c"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
LLGoFiles = "_wrap/fddef.c"
|
||||||
|
LLGoPackage = "link"
|
||||||
|
)
|
||||||
|
|
||||||
|
// (TODO) merge to timeval
|
||||||
|
type TimeVal struct {
|
||||||
|
TvSec c.Long
|
||||||
|
TvUSec c.Int
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:linkname FD_ZERO C.fd_zero
|
||||||
|
func FD_ZERO(fdSet *syscall.FdSet)
|
||||||
|
|
||||||
|
//go:linkname FD_SET C.fdSet
|
||||||
|
func FD_SET(fd c.Int, fdSet *syscall.FdSet)
|
||||||
|
|
||||||
|
//go:linkname FD_ISSET C.fd_isset
|
||||||
|
func FD_ISSET(fd c.Int, fdSet *syscall.FdSet) c.Int
|
||||||
|
|
||||||
|
//go:linkname Select C.select
|
||||||
|
func Select(n c.Int, r *syscall.FdSet, w *syscall.FdSet, e *syscall.FdSet, timeout *TimeVal) c.Int
|
||||||
Reference in New Issue
Block a user