xref: /qemu/include/qemu/sockets.h (revision 09147930)
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