GSK Reference Manual | ||||
---|---|---|---|---|
GskSocketAddressClass; GskSocketAddress; GskSocketAddressIpv4; GskSocketAddressLocal; GskSocketAddressIpv6; GskSocketAddressEthernet; GskSocketAddress* gsk_socket_address_from_native (gconstpointer native_data, gsize native_size); gint gsk_socket_address_protocol_family (GskSocketAddress *address); gint gsk_socket_address_address_family (GskSocketAddress *address); guint gsk_socket_address_sizeof_native (GskSocketAddress *address); gboolean gsk_socket_address_to_native (GskSocketAddress *address, gpointer output, GError **error); char* gsk_socket_address_to_string (GskSocketAddress *address); #define gsk_socket_address_ipv4_localhost(port) GskSocketAddress* gsk_socket_address_ipv4_new (const guint8 *ip_address, guint16 port); GskSocketAddress* gsk_socket_address_ipv6_new (const guint8 *address, guint16 port); GskSocketAddress* gsk_socket_address_ethernet_new (const guint8 *mac_addr); GskSocketAddress* gsk_socket_address_local_new (const char *path); gboolean gsk_socket_address_system_supports_ipv6 (void); void gsk_socket_address_register_subclass (GskSocketAddressClass *klass); int gsk_socket_address_connect_fd (GskSocketAddress *address, gboolean *is_connected, GError **error); gboolean gsk_socket_address_finish_fd (int fd, GError **error); gboolean gsk_socket_address_equals (gconstpointer address_a_ptr, gconstpointer address_b_ptr); guint gsk_socket_address_hash (gconstpointer address_ptr); #define GSK_SOCKET_ADDRESS_REMOTE_QUARK #define GSK_SOCKET_ADDRESS_LOCAL_QUARK
GObject +----GskSocketAddress +----GskSocketAddressIpv4 +----GskSocketAddressIpv6 +----GskSocketAddressLocal
GObject +----GskSocketAddress +----GskSocketAddressIpv4
GObject +----GskSocketAddress +----GskSocketAddressLocal
GObject +----GskSocketAddress +----GskSocketAddressIpv6
typedef struct { GObjectClass object_class; gsize sizeof_native_address; gint protocol_family; /* eg PF_INET, PF_LOCAL etc */ gint address_family; /* eg AF_INET, AF_LOCAL etc */ gboolean (*to_native) (GskSocketAddress *address, gpointer output); gboolean (*from_native)(GskSocketAddress *address, gconstpointer sockaddr_data, gsize sockaddr_length); char *(*to_string) (GskSocketAddress *address); /* note: both addresses will be of exactly the same type */ gboolean (*equals) (GskSocketAddress *addr1, GskSocketAddress *addr2); guint (*hash) (GskSocketAddress *addr); } GskSocketAddressClass;
The base-class for all types of socket-addresses. The members of this class should only be used by derived classes.
GObjectClass object_class ; |
the base-class. |
gsize sizeof_native_address ; |
how big is a socket-address of this type in the native OS representation. |
gint protocol_family ; |
native PF_* macro value for this type of address. |
gint address_family ; |
native AF_* macro value for this type of address. |
to_native () |
Convert to a native struct sockaddr* type representation. |
from_native () |
Convert from a native struct sockaddr* type representation. |
to_string () |
Convert to a human-readable ASCII representation. |
equals () |
Test if this is equal to another GskSocketAddress of this exact type are equal. |
hash () |
Compute a hash-value based on this socket. |
typedef struct _GskSocketAddress GskSocketAddress;
The base instance for all socket addresses.
typedef struct _GskSocketAddressIpv4 GskSocketAddressIpv4;
An IPv4 Socket Address. This is a 4-byte host IP address and a 2-byte port number (as a guint16).
typedef struct _GskSocketAddressLocal GskSocketAddressLocal;
A local socket, often called a UNIX-domain socket.
typedef struct _GskSocketAddressIpv6 GskSocketAddressIpv6;
An IPv6 Socket Address. For now, the IPv6 implementation is unfinished.
typedef struct { GskSocketAddress socket_address; guint8 mac_address[6]; } GskSocketAddressEthernet;
GskSocketAddress* gsk_socket_address_from_native (gconstpointer native_data, gsize native_size);
Allocate a new GskSocketAddress based on native_data, if we know how.
native_data : |
a struct sockaddr_t*. |
native_size : |
length of native_data. |
Returns : | a new GskSocketAddress or NULL if we could not interpret the sockaddr. |
gint gsk_socket_address_protocol_family (GskSocketAddress *address);
Get the PF_* macro value corresponding to this address.
address : |
a socket address. |
Returns : | the protocol family. |
gint gsk_socket_address_address_family (GskSocketAddress *address);
Get the AF_* macro value corresponding to this address.
address : |
a socket address. |
Returns : | the address family. |
guint gsk_socket_address_sizeof_native (GskSocketAddress *address);
Determine how many bytes of storage the sockaddr_t based on this object will require.
address : |
a socket address. |
Returns : | the size in bytes of the native sockaddr type. |
gboolean gsk_socket_address_to_native (GskSocketAddress *address, gpointer output, GError **error);
Convert a socket-address to its native form.
address : |
a socket address. |
output : |
a struct sockaddr_t (at least conceptually) |
error : |
optional error return value. |
Returns : | whether it was able to convert the address. |
char* gsk_socket_address_to_string (GskSocketAddress *address);
Convert a socket-address to a newly allocated string, which the caller must free.
address : |
a socket address. |
Returns : | a string for the user to free. |
#define gsk_socket_address_ipv4_localhost(port)
Create a new address pointing to this host, on the given port.
port : |
the port on the local host the address should refer to. |
Returns : | the newly allocated GskSocketAddressIpv4. |
GskSocketAddress* gsk_socket_address_ipv4_new (const guint8 *ip_address, guint16 port);
Allocate a new IPv4 address given a numeric IP and port number.
ip_address : |
the 4-byte IP address |
port : |
the port number. |
Returns : | a new GskSocketAddress |
GskSocketAddress* gsk_socket_address_ipv6_new (const guint8 *address, guint16 port);
address : |
|
port : |
|
Returns : |
GskSocketAddress* gsk_socket_address_ethernet_new (const guint8 *mac_addr);
Allocate a new socket address corresponding to an ethernet device.
mac_addr : |
the 6-byte unique address of this ethernet device. |
Returns : | the newly allocated socket-address. |
GskSocketAddress* gsk_socket_address_local_new (const char *path);
Create a socket-address which is associated with a path in the local filesystem. Such socket-addresses are useful for fast communication between processes on the same host.
Sometimes, these types of addresses are called unix-domain addresses, but it is better to avoid the term unix for a generic concept.
path : |
path in filesystem to hook this socket up. |
Returns : | the newly allocated socket address. |
gboolean gsk_socket_address_system_supports_ipv6 (void);
Returns : |
void gsk_socket_address_register_subclass (GskSocketAddressClass *klass);
Add the class to a per address-family hash table for use converting from native.
klass : |
a concrete derived class. |
int gsk_socket_address_connect_fd (GskSocketAddress *address, gboolean *is_connected, GError **error);
Begin connecting to a location by address.
If the connection is fully established before returning to
the caller, then *is_connected
will be set to TRUE
and a non-negative file descriptor will be returned.
Sometimes connections only partially succeed,
in which case *is_connected
will be set to FALSE,
and you must call gsk_socket_address_finish_fd()
whenever the
file-description polls ready to input or output.
If the connect fails immediately, -1 will be returned
and *error
will be set if error
is non-NULL.
address : |
the address to connect to. |
is_connected : |
whether the connection succeeded completely. |
error : |
an optional error return. |
Returns : | the connecting or connected file-descriptor, or -1 on error. |
gboolean gsk_socket_address_finish_fd (int fd, GError **error);
Finish connecting a partially connected file-descriptor.
fd : |
a file descriptor which may be done connecting. |
error : |
an optional error return. |
Returns : | TRUE if the connection is now established,
otherwise it returns FALSE and will set *error if an error occurred.
|
gboolean gsk_socket_address_equals (gconstpointer address_a_ptr, gconstpointer address_b_ptr);
This function is a GEqualFunc which can determine if two socket address are the same. This is principally used with gsk_socket_address_hash to make a hash-table mapping from socket-addresses.
(This just uses the virtual method of GskSocketAddressClass)
address_a_ptr : |
a pointer to a GskSocketAddress. |
address_b_ptr : |
a pointer to a GskSocketAddress. |
Returns : | whether the addresses are equal. |
guint gsk_socket_address_hash (gconstpointer address_ptr);
This function is a GHashFunc which can determine a hash value for a socket-address.
This is principally used with gsk_socket_address_equals to make a hash-table mapping from socket-addresses.
(This just uses the virtual method of GskSocketAddressClass)
address_ptr : |
a pointer to a GskSocketAddress. |
Returns : | the hash value for the socket-address. |
#define GSK_SOCKET_ADDRESS_REMOTE_QUARK (gsk_socket_address_get_remote_quark())
Used with g_object_set_qdata()
to store
the remote-address of a stream.