1 | /* headers to use the BSD sockets */ |
2 | |
3 | #ifndef QEMU_SOCKETS_H |
4 | #define QEMU_SOCKETS_H |
5 | |
6 | #ifdef _WIN32 |
7 | |
8 | int inet_aton(const char *cp, struct in_addr *ia); |
9 | |
10 | #endif /* !_WIN32 */ |
11 | |
12 | #include "qapi/qapi-types-sockets.h" |
13 | |
14 | /* misc helpers */ |
15 | bool fd_is_socket(int fd); |
16 | int qemu_socket(int domain, int type, int protocol); |
17 | int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen); |
18 | int socket_set_cork(int fd, int v); |
19 | int socket_set_nodelay(int fd); |
20 | void qemu_set_block(int fd); |
21 | void qemu_set_nonblock(int fd); |
22 | int socket_set_fast_reuse(int fd); |
23 | |
24 | #ifdef WIN32 |
25 | /* Windows has different names for the same constants with the same values */ |
26 | #define SHUT_RD 0 |
27 | #define SHUT_WR 1 |
28 | #define SHUT_RDWR 2 |
29 | #endif |
30 | |
31 | int inet_ai_family_from_address(InetSocketAddress *addr, |
32 | Error **errp); |
33 | int inet_parse(InetSocketAddress *addr, const char *str, Error **errp); |
34 | int inet_connect(const char *str, Error **errp); |
35 | int inet_connect_saddr(InetSocketAddress *saddr, Error **errp); |
36 | |
37 | NetworkAddressFamily inet_netfamily(int family); |
38 | |
39 | int unix_listen(const char *path, Error **errp); |
40 | int unix_connect(const char *path, Error **errp); |
41 | |
42 | SocketAddress *socket_parse(const char *str, Error **errp); |
43 | int socket_connect(SocketAddress *addr, Error **errp); |
44 | int socket_listen(SocketAddress *addr, int num, Error **errp); |
45 | void socket_listen_cleanup(int fd, Error **errp); |
46 | int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp); |
47 | |
48 | /* Old, ipv4 only bits. Don't use for new code. */ |
49 | int parse_host_port(struct sockaddr_in *saddr, const char *str, |
50 | Error **errp); |
51 | int socket_init(void); |
52 | |
53 | /** |
54 | * socket_sockaddr_to_address: |
55 | * @sa: socket address struct |
56 | * @salen: size of @sa struct |
57 | * @errp: pointer to uninitialized error object |
58 | * |
59 | * Get the string representation of the socket |
60 | * address. A pointer to the allocated address information |
61 | * struct will be returned, which the caller is required to |
62 | * release with a call qapi_free_SocketAddress() when no |
63 | * longer required. |
64 | * |
65 | * Returns: the socket address struct, or NULL on error |
66 | */ |
67 | SocketAddress * |
68 | socket_sockaddr_to_address(struct sockaddr_storage *sa, |
69 | socklen_t salen, |
70 | Error **errp); |
71 | |
72 | /** |
73 | * socket_local_address: |
74 | * @fd: the socket file handle |
75 | * @errp: pointer to uninitialized error object |
76 | * |
77 | * Get the string representation of the local socket |
78 | * address. A pointer to the allocated address information |
79 | * struct will be returned, which the caller is required to |
80 | * release with a call qapi_free_SocketAddress() when no |
81 | * longer required. |
82 | * |
83 | * Returns: the socket address struct, or NULL on error |
84 | */ |
85 | SocketAddress *socket_local_address(int fd, Error **errp); |
86 | |
87 | /** |
88 | * socket_remote_address: |
89 | * @fd: the socket file handle |
90 | * @errp: pointer to uninitialized error object |
91 | * |
92 | * Get the string representation of the remote socket |
93 | * address. A pointer to the allocated address information |
94 | * struct will be returned, which the caller is required to |
95 | * release with a call qapi_free_SocketAddress() when no |
96 | * longer required. |
97 | * |
98 | * Returns: the socket address struct, or NULL on error |
99 | */ |
100 | SocketAddress *socket_remote_address(int fd, Error **errp); |
101 | |
102 | /** |
103 | * socket_address_flatten: |
104 | * @addr: the socket address to flatten |
105 | * |
106 | * Convert SocketAddressLegacy to SocketAddress. Caller is responsible |
107 | * for freeing with qapi_free_SocketAddress(). |
108 | * |
109 | * Returns: the argument converted to SocketAddress. |
110 | */ |
111 | SocketAddress *socket_address_flatten(SocketAddressLegacy *addr); |
112 | |
113 | #endif /* QEMU_SOCKETS_H */ |
114 | |