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