xref: /qemu/include/qemu/sockets.h (revision bf8d4924)
1 /* headers to use the BSD sockets */
2 #ifndef QEMU_SOCKET_H
3 #define QEMU_SOCKET_H
4 
5 #ifdef _WIN32
6 
7 int inet_aton(const char *cp, struct in_addr *ia);
8 
9 #endif /* !_WIN32 */
10 
11 #include "qapi-types.h"
12 
13 /* misc helpers */
14 int qemu_socket(int domain, int type, int protocol);
15 int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
16 int socket_set_cork(int fd, int v);
17 int socket_set_nodelay(int fd);
18 void qemu_set_block(int fd);
19 void qemu_set_nonblock(int fd);
20 int socket_set_fast_reuse(int fd);
21 
22 #ifdef WIN32
23 /* Windows has different names for the same constants with the same values */
24 #define SHUT_RD   0
25 #define SHUT_WR   1
26 #define SHUT_RDWR 2
27 #endif
28 
29 /* callback function for nonblocking connect
30  * valid fd on success, negative error code on failure
31  */
32 typedef void NonBlockingConnectHandler(int fd, Error *err, void *opaque);
33 
34 InetSocketAddress *inet_parse(const char *str, Error **errp);
35 int inet_listen(const char *str, char *ostr, int olen,
36                 int socktype, int port_offset, Error **errp);
37 int inet_connect(const char *str, Error **errp);
38 int inet_nonblocking_connect(const char *str,
39                              NonBlockingConnectHandler *callback,
40                              void *opaque, Error **errp);
41 
42 NetworkAddressFamily inet_netfamily(int family);
43 
44 int unix_listen(const char *path, char *ostr, int olen, Error **errp);
45 int unix_connect(const char *path, Error **errp);
46 int unix_nonblocking_connect(const char *str,
47                              NonBlockingConnectHandler *callback,
48                              void *opaque, Error **errp);
49 
50 SocketAddress *socket_parse(const char *str, Error **errp);
51 int socket_connect(SocketAddress *addr, Error **errp,
52                    NonBlockingConnectHandler *callback, void *opaque);
53 int socket_listen(SocketAddress *addr, Error **errp);
54 void socket_listen_cleanup(int fd, Error **errp);
55 int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp);
56 
57 /* Old, ipv4 only bits.  Don't use for new code. */
58 int parse_host_port(struct sockaddr_in *saddr, const char *str);
59 int socket_init(void);
60 
61 /**
62  * socket_sockaddr_to_address:
63  * @sa: socket address struct
64  * @salen: size of @sa struct
65  * @errp: pointer to uninitialized error object
66  *
67  * Get the string representation of the socket
68  * address. A pointer to the allocated address information
69  * struct will be returned, which the caller is required to
70  * release with a call qapi_free_SocketAddress when no
71  * longer required.
72  *
73  * Returns: the socket address struct, or NULL on error
74  */
75 SocketAddress *
76 socket_sockaddr_to_address(struct sockaddr_storage *sa,
77                            socklen_t salen,
78                            Error **errp);
79 
80 /**
81  * socket_local_address:
82  * @fd: the socket file handle
83  * @errp: pointer to uninitialized error object
84  *
85  * Get the string representation of the local socket
86  * address. A pointer to the allocated address information
87  * struct will be returned, which the caller is required to
88  * release with a call qapi_free_SocketAddress when no
89  * longer required.
90  *
91  * Returns: the socket address struct, or NULL on error
92  */
93 SocketAddress *socket_local_address(int fd, Error **errp);
94 
95 /**
96  * socket_remote_address:
97  * @fd: the socket file handle
98  * @errp: pointer to uninitialized error object
99  *
100  * Get the string representation of the remote socket
101  * address. A pointer to the allocated address information
102  * struct will be returned, which the caller is required to
103  * release with a call qapi_free_SocketAddress when no
104  * longer required.
105  *
106  * Returns: the socket address struct, or NULL on error
107  */
108 SocketAddress *socket_remote_address(int fd, Error **errp);
109 
110 
111 void qapi_copy_SocketAddress(SocketAddress **p_dest,
112                              SocketAddress *src);
113 
114 /**
115  * socket_address_to_string:
116  * @addr: the socket address struct
117  * @errp: pointer to uninitialized error object
118  *
119  * Get the string representation of the socket
120  * address. A pointer to the char array containing
121  * string format will be returned, the caller is
122  * required to release the returned value when no
123  * longer required with g_free.
124  *
125  * Returns: the socket address in string format, or NULL on error
126  */
127 char *socket_address_to_string(struct SocketAddress *addr, Error **errp);
128 #endif /* QEMU_SOCKET_H */
129