github.com/gotranspile/cxgo@v0.3.8-0.20240118201721-29871598a6a2/libs/sys_socket.go (about) 1 package libs 2 3 import ( 4 "github.com/gotranspile/cxgo/runtime/cnet" 5 "github.com/gotranspile/cxgo/types" 6 ) 7 8 const ( 9 sysSocketH = "sys/socket.h" 10 ) 11 12 func init() { 13 RegisterLibrary(sysSocketH, func(c *Env) *Library { 14 intT := types.IntT(4) 15 int16T := types.IntT(2) 16 uint16T := types.UintT(2) 17 gintT := c.Go().Int() 18 uintT := types.UintT(4) 19 bytesT := c.C().String() 20 inAddrT := c.GetLibraryType(arpaInetH, "in_addr") 21 sockAddrT := types.NamedT("cnet.SockAddr", types.StructT([]*types.Field{ 22 {Name: types.NewIdentGo("sa_family", "Family", int16T)}, 23 {Name: types.NewIdentGo("sa_data", "Data", c.C().BytesN(14))}, 24 })) 25 sockAddrInT := types.NamedT("cnet.SockAddrInet", types.StructT([]*types.Field{ 26 {Name: types.NewIdentGo("sin_family", "Family", int16T)}, 27 {Name: types.NewIdentGo("sin_port", "Port", uint16T)}, 28 {Name: types.NewIdentGo("sin_addr", "Addr", inAddrT)}, 29 {Name: types.NewIdentGo("sin_zero", "Zero", c.C().BytesN(8))}, 30 })) 31 return &Library{ 32 Imports: map[string]string{ 33 "csys": RuntimePrefix + "csys", 34 "cnet": RuntimePrefix + "cnet", 35 }, 36 Types: map[string]types.Type{ 37 "sockaddr": sockAddrT, 38 "sockaddr_in": sockAddrInT, 39 }, 40 Idents: map[string]*types.Ident{ 41 "AF_INET": c.NewIdent("AF_INET", "cnet.AF_INET", cnet.AF_INET, gintT), 42 "SOCK_STREAM": c.NewIdent("SOCK_STREAM", "cnet.SOCK_STREAM", cnet.SOCK_STREAM, gintT), 43 "SOCK_DGRAM": c.NewIdent("SOCK_DGRAM", "cnet.SOCK_DGRAM", cnet.SOCK_DGRAM, gintT), 44 "SOL_SOCKET": c.NewIdent("SOL_SOCKET", "cnet.SOL_SOCKET", cnet.SOL_SOCKET, types.UintT(2)), 45 "SO_BROADCAST": c.NewIdent("SO_BROADCAST", "cnet.SO_BROADCAST", cnet.SO_BROADCAST, gintT), 46 "accept": c.NewIdent("accept", "cnet.Accept", cnet.Accept, c.FuncTT(gintT, gintT, c.PtrT(sockAddrT), c.PtrT(gintT))), 47 "bind": c.NewIdent("bind", "cnet.Bind", cnet.Bind, c.FuncTT(gintT, gintT, c.PtrT(sockAddrT), gintT)), 48 "listen": c.NewIdent("listen", "cnet.Listen", cnet.Listen, c.FuncTT(intT, intT, intT)), 49 "shutdown": c.NewIdent("shutdown", "cnet.Shutdown", cnet.Shutdown, c.FuncTT(intT, intT, intT)), 50 "send": c.NewIdent("send", "cnet.Send", cnet.Send, c.FuncTT(intT, intT, bytesT, intT, intT)), 51 "sendto": c.NewIdent("sendto", "cnet.SendTo", cnet.SendTo, c.FuncTT(intT, intT, bytesT, uintT, intT, c.PtrT(sockAddrT), gintT)), 52 "recv": c.NewIdent("recv", "cnet.Recv", cnet.Recv, c.FuncTT(intT, intT, bytesT, uintT, intT)), 53 "recvfrom": c.NewIdent("recvfrom", "cnet.RecvFrom", cnet.RecvFrom, c.FuncTT(intT, intT, bytesT, uintT, intT, c.PtrT(sockAddrT), c.PtrT(gintT))), 54 "socket": c.NewIdent("socket", "cnet.Socket", cnet.Socket, c.FuncTT(gintT, gintT, gintT, gintT)), 55 "setsockopt": c.NewIdent("setsockopt", "cnet.SetSockOpt", cnet.SetSockOpt, c.FuncTT(gintT, gintT, gintT, gintT, bytesT, gintT)), 56 }, 57 } 58 }) 59 }