The main focus of support in this library was to support Internet sockets in a cross-platform way. Every other possible use of sockets currently is not supported.
The library is compiled to a 'sgssockets' shared library so it can be included this way (assuming that, on Linux and similar systems, LD_LIBRARY_PATH is set correctly):
include "sgssockets";
Objects: Functions: Constants: AF_/PF_ - address/protocol families
SOCK_ - socket types
IPPROTO_ - Internet protocol types
MSG_ - transfer flags
SHUT_ - shutdown flags (non-Windows version)
SD_ - shutdown flags (Windows version)
socket_error( bool as_text = false ) returns the last error received from working with the sockets, possibly as text
socket_geterrnobyname( string name ) returns a socket error code as integer by its name (for example, "EWOULDBLOCK") error codes can differ between platforms so it is expected to retrieve the required ones from the function for comparisons
read-only properties
family - the address family (AF_* constants) of this address, may be other than AF_INET or AF_INET6 but for those, feature set is severely limited
read-write properties
port - (AF_INET/AF_INET6 only)
addr_u32 - (AF_INET only) the address as an integer between 0 and 2^32-1
addr_buf - (AF_INET/AF_INET6 only) the address as a buffer of bytes of 'string' type
addr_bytes - (AF_INET/AF_INET6 only) the address as an array of byte integers
addr_string - (AF_INET/AF_INET6 only) the address string without the port
full_addr_string - (AF_INET/AF_INET6 only) the address string with the port
other features:
tostring = <obj>.full_addr_string
GC-safe
limited content dump (full only for AF_INET/AF_INET6 addresses, for any other only family
is dumped)
type identification (returns the string "socket_address")
socket_address( int addrfamily, string addrstring[, int port ]) create address from string, optionally set port only AF_INET and AF_INET6 are supported at the moment
socket_address_frombytes( int addrfamily, string addrbytes[, int port ]) create address from byte buffer, optionally set port only AF_INET and AF_INET6 are supported at the moment
socket_getaddrinfo( string addrstring, string port[, int hint_socktype[, int hint_addrfamily ]]) resolve domain name to address, optionally specifying socket type and address family needed
socket_gethostname() return the host name of computer
methods
bind - bind socket to port
listen - wait for connection requests, return if successful
accept - accept an incoming connection, retrieve connecting socket
connect - connect to a remote address
send - send data over socket
sendto - send data to specified address over socket
recv - receive data from socket
recvfrom - receive connectionless data and sender address from socket
shutdown - shut down socket access (partially or fully)
close - close socket, disabling further operations
getpeername - get hostname of connected device
read-only properties
[int] error - the last error code specifically for the socket
write-only properties
[bool] blocking - whether the socket is blocking
read/write properties
[bool] broadcast - whether the socket has broadcasting capabilities (applies to UDP sockets only)
[bool] reuse_addr - whether to reuse addresses (ports) when binding the socket
[real] send_timeout - timeout in seconds for send / sendto functions
[real] recv_timeout - timeout in seconds for recv / recvfrom functions
other features:
tostring = "socket"
tobool = whether the socket is valid (not closed yet)
GC-safe
type identification (returns the string "socket")
socket.bind( int port ) bind the socket to a port for listening
socket.listen( int queuesize ) wait for connection requests, return if successful
socket.accept() retrieve the socket and address from the incoming connection
socket.connect( socket_address ) attempt to create a connection to a specific address, return if successful
socket.send( string buffer[, int flags ]) attempt to send data over a connected socket, return amount of data sent or false on failure operation can take an unspecified amount of time, the limit can be controller with send_timeout
property of the socket
socket.sendto( string buffer, socket_address[, int flags ]) attempt to send data over an unconnected socket to the specified address, return amount of data sent or false on failure operation can take an unspecified amount of time, the limit can be controller with send_timeout
property of the socket
socket.recv( int maxlength[, int flags ]) attempt to receive at most maxlength
bytes of pending data socket may block if blocking is enabled and there's no data at the moment
maximum blocking time is determined by socket's recv_timeout
property
return values:
false if there was an error
true if socket was closed
byte buffer containing 1 - maxlength
bytes if read was successful
socket.recvfrom( int maxlength[, int flags ]) attempt to receive at most maxlength
bytes of pending data, return address of sender with data socket may block if blocking is enabled and there's no data at the moment
maximum blocking time is determined by socket's recv_timeout
property
return values:
false if there was an error
byte buffer containing 1 - maxlength
bytes and socket_address if read was successful
socket.shutdown( int type ) shut down the socket, disabling the specified kind of operations socket type is one of SHUT_ or SD_ constants
socket.close() close the socket, disabling further operations
socket.getpeername() return the host name of the device on the other end of the socket, if it's connected
socket( int addrfamily, int socktype, int protocol ) create a socket with the specified parameters addrfamily
requires one of AF_ constants
socktype
requires one of SOCK_ constants
protocol
requires one of IPPROTO_ constants
a valid socket object is returned on success
socket_tcp([ bool ipv6 ]) create a TCP socket depending on ipv6
value, a socket uses IPv6 or IPv4 address family
socket_udp([ bool ipv6 ]) create a UDP socket depending on ipv6
value, a socket uses IPv6 or IPv4 address family
socket_select( array readscl, array writescl, array errorscl[, real timeout ]) check socket lists for state, optionally specifying maximum wait time readscl
- list of sockets to be checked for readability
writescl
- list of sockets to be checked for writability
errorscl
- list of sockets to be checked for errors
timeout
- optional checking timeout, function waits indefinitely if not specified
the function returns as soon as at least one socket is in the required state or if time limit was reached
return values:
- -1 on error
- >0 if sockets have acquired the necessary states (the total number of such sockets is returned)
- 0 if time limit was reached
address family / protocol family constants
AF_INET - IPv4 address family
AF_INET6 - IPv6 address family
AF_UNIX - Unix socket address family
AF_IPX - IPX socket address family
All of these constants are available with both AF_ and PF_ prefixes.
socket type constants
SOCK_STREAM - TCP socket type (connection-based, stream, sequential, reliable)
SOCK_DGRAM - UDP socket type (connectionless, datagrams, unreliable, out-of-order)
SOCK_RAW - raw socket (low-level network access)
SOCK_SEQPACKET - (connection-based, datagrams, sequential, reliable)
internet protocol type constants
IPPROTO_TCP - TCP protocol
IPPROTO_UDP - UDP protocol
message flag constants
MSG_CONFIRM - confirm path validity
MSG_DONTROUTE - bypass gateway for packet transfer
MSG_DONTWAIT - non-blocking I/O
MSG_EOR - end of record
MSG_MORE - sender will send more
MSG_NOSIGNAL - do not generate SIGPIPE
MSG_OOB - out-of-band data
shutdown type constants (non-Windows version), same as SD_ constants
SHUT_RD - shut down reading/receiving capability
SHUT_WR - shut down writing/sending capability
SHUT_RDWR - shut down everything
shutdown type constants (Windows version), same as SHUT_ constants
SD_RECEIVE - shut down reading/receiving capability
SD_SEND - shut down writing/sending capability
SD_BOTH - shut down everything
socket a socket object contains the socket identifier directly in the data pointer extraction of the identifier can be done this way: ((int)(size_t)obj->data)
the identifier may be -1 if the socket is closed
socket_address a socket address object contains the address of any type (family), data pointer points to a sockaddr_storage struct extraction can be done by casting the pointer to one of the sockaddr types (_in, _in6, _storage and others), depending on the value of the address family member (all structs are supposed to have it at the same place)
image/svg+xml