Differences From Artifact [232e64699e]:
- File
src/socket.h
— part of check-in
[ab9810ef69]
at
2018-08-06 22:34:30
on branch trunk
— socket.m: Replace inet_{ntop,pton} with own impl
Not all OSes supported by ObjFW provide them. (user: js, size: 4355) [annotate] [blame] [check-ins using]
To Artifact [d1393543d0]:
- File
src/socket.h
— part of check-in
[8f810ecb7e]
at
2018-08-11 14:00:46
on branch trunk
— Change the layout of of_socket_address_t
Instead of containing a struct sockaddr_storage - which does not exist
on all supported platforms - it now contains a union of all struct
sockaddr_* types.Additionally, if struct sockaddr_in6 does not exist, it is defined so
that an IPv6 can be stored even if the system does not support IPv6. (user: js, size: 5102) [annotate] [blame] [check-ins using]
| ︙ | ︙ | |||
46 47 48 49 50 51 52 | # endif # include <windows.h> # include <ws2tcpip.h> #endif /*! @file */ | < < < < < < < < < < < < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# endif
# include <windows.h>
# include <ws2tcpip.h>
#endif
/*! @file */
#ifdef OF_MORPHOS
typedef long socklen_t;
#endif
#ifdef OF_MORPHOS_IXEMUL
typedef int socklen_t;
#endif
#ifdef OF_WII
# include <network.h>
#endif
#ifdef OF_PSP
# include <stdint.h>
#endif
#import "macros.h"
OF_ASSUME_NONNULL_BEGIN
#ifndef OF_WINDOWS
typedef int of_socket_t;
#else
typedef SOCKET of_socket_t;
#endif
/*!
* @enum of_socket_address_type_t socket.h ObjFW/socket.h
*/
typedef enum {
OF_SOCKET_ADDRESS_FAMILY_UNKNOWN,
OF_SOCKET_ADDRESS_FAMILY_IPV4,
OF_SOCKET_ADDRESS_FAMILY_IPV6,
} of_socket_address_family_t;
#ifndef OF_HAVE_IPV6
struct sockaddr_in6 {
sa_family_t sin6_family;
in_port_t sin6_port;
uint32_t sin6_flowinfo;
struct in6_addr {
uint8_t s6_addr[16];
} sin6_addr;
uint32_t sin6_scope_id;
};
#endif
/*!
* @struct of_socket_address_t socket.h ObjFW/socket.h
*
* @brief A struct which represents a host / port pair for a socket.
*/
typedef struct OF_BOXABLE {
/*
* Even though struct sockaddr contains the family, we need to use our
* own family, as we need to support storing an IPv6 address on systems
* that don't support IPv6. These may not have AF_INET6 defined and we
* can't just define it, as the value is system-dependent and might
* clash with an existing value.
*/
of_socket_address_family_t family;
union {
struct sockaddr sockaddr;
struct sockaddr_in in;
struct sockaddr_in6 in6;
} sockaddr;
socklen_t length;
} of_socket_address_t;
#ifdef __cplusplus
extern "C" {
#endif
extern bool of_socket_init(void);
|
| ︙ | ︙ | |||
173 174 175 176 177 178 179 180 181 182 183 184 |
* @param address The address to convert to a string
* @param port A pointer to an uint16_t which should be set to the port of the
* address or NULL if the port is not needed
* @return The address as an IP string
*/
extern OFString *_Nonnull of_socket_address_ip_string(
const of_socket_address_t *_Nonnull address, uint16_t *_Nullable port);
#ifdef __cplusplus
}
#endif
OF_ASSUME_NONNULL_END
| > > > > > > > > > > | 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
* @param address The address to convert to a string
* @param port A pointer to an uint16_t which should be set to the port of the
* address or NULL if the port is not needed
* @return The address as an IP string
*/
extern OFString *_Nonnull of_socket_address_ip_string(
const of_socket_address_t *_Nonnull address, uint16_t *_Nullable port);
/*!
* @brief Sets the port of the specified of_socket_address_t, independent of
* the address family used.
*
* @param address The address on which to set the port
* @param port The port to set on the address
*/
extern void of_socket_address_set_port(of_socket_address_t *_Nonnull address,
uint16_t port);
#ifdef __cplusplus
}
#endif
OF_ASSUME_NONNULL_END
|