Advertisement
Starkkz

LuaJIT socket wrapper

Jul 10th, 2014
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.76 KB | None | 0 0
  1. if not ffi then ffi = require("ffi") end
  2.  
  3. INVALID_SOCKET_ = -1
  4. SOL_SOCKET = 0xFFFF
  5. INADDR_NONE_ = 0xFFFFFFFF
  6.  
  7. if jit.os == "Windows" then
  8.     FIONREAD = 0x4004667F
  9.     sock = ffi.load("ws2_32")
  10. elseif jit.os == "MacOS" then
  11.     FIONREAD = 0x4004667F
  12.     sock = ffi.load("sys/socket.h")
  13. elseif jit.os == "Linux" then
  14.     FIONREAD = 0x0000541B
  15.     sock = ffi.load("sys/socket.h")
  16. end
  17.  
  18. ffi.cdef [[
  19.     typedef uint16_t u_short;
  20.     typedef uint32_t u_int;
  21.     typedef unsigned long u_long;
  22.     typedef uintptr_t SOCKET;
  23.     typedef struct fd_set {u_int fd_count;SOCKET  fd_array[64];} fd_set;
  24.     u_long htonl(u_long hostlong);
  25.     u_short ntohs(u_short netshort);
  26.     u_long ntohl(u_long netlong);
  27.     unsigned long inet_addr(const char* cp);
  28.     char* inet_ntoa(struct in_addr in);
  29.     SOCKET socket(int af, int type, int protocol);
  30.     SOCKET accept(SOCKET s,struct sockaddr* addr,int* addrlen);
  31.     int bind(SOCKET s, const struct sockaddr* name, int namelen);
  32.     int closesocket(SOCKET s);
  33.     int connect(SOCKET s, const struct sockaddr * name, int namelen);
  34.     int getsockname(SOCKET s, struct sockaddr* name, int* namelen);
  35.     int ioctlsocket(SOCKET s, long cmd, u_long* argp);
  36.     int listen(SOCKET s, int backlog);
  37.     int recv(SOCKET s, char* buf, int len, int flags);
  38.     int recvfrom(SOCKET s, char* buf, int len, int flags, struct sockaddr* from, int* fromlen);
  39.     int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, const struct timeval* timeout);
  40.     int send(SOCKET s, const char* buf, int len, int flags);
  41.     int sendto(SOCKET s, const char* buf, int len, int flags, const struct sockaddr* to, int tolen);
  42.     int setsockopt(SOCKET s, int level, int optname, const char* optval, int optlen);
  43.     int shutdown(SOCKET s, int how);
  44.     struct hostent* gethostbyname(const char* name);
  45. ]]
  46.  
  47. print(type(sock.sendto))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement