48 ret = recv (fd, buffer, len, 0);
62 return send (fd, buffer, len, 0);
71 struct addrinfo hints;
72 struct addrinfo *addrinfo;
73 struct addrinfo *addrinfos;
80 memset (&hints, 0,
sizeof (hints));
82 hints.ai_family = url->
host[0] ? (ipv6 ? PF_INET6 : PF_INET) : PF_UNSPEC;
83 hints.ai_socktype = SOCK_STREAM;
84 hints.ai_protocol = 0;
90 for (addrinfo = addrinfos; addrinfo; addrinfo = addrinfo->ai_next) {
92 const char* reuseaddr = (
const char*)&_reuseaddr;
94 fd = socket (addrinfo->ai_family, addrinfo->ai_socktype, addrinfo->ai_protocol);
99 setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, reuseaddr,
sizeof (_reuseaddr));
101 if (connect (fd, addrinfo->ai_addr, addrinfo->ai_addrlen) == 0) {
135 struct sockaddr sockaddr;
140 socklen =
sizeof (sockaddr);
142 fd = accept (transport->
fd, &sockaddr, &socklen);
146 const char* reuseaddr = (
const char*)&_reuseaddr;
147 const char* nodelay = (
const char*)&_nodelay;
155 setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, reuseaddr,
sizeof (_reuseaddr));
156 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, nodelay,
sizeof (_nodelay));
175 struct addrinfo hints;
176 struct addrinfo *addrinfo;
177 struct addrinfo *addrinfos;
184 memset (&hints, 0,
sizeof (hints));
185 hints.ai_flags = AI_PASSIVE;
186 hints.ai_family = url->
host[0] ? (ipv6 ? PF_INET6 : PF_INET) : PF_UNSPEC;
187 hints.ai_socktype = SOCK_STREAM;
188 hints.ai_protocol = 0;
194 for (addrinfo = addrinfos; addrinfo; addrinfo = addrinfo->ai_next) {
197 const char* reuseaddr = (
const char*)&_reuseaddr;
198 const char* nodelay = (
const char*)&_nodelay;
200 fd = socket (addrinfo->ai_family, addrinfo->ai_socktype, addrinfo->ai_protocol);
205 setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, reuseaddr,
sizeof (_reuseaddr));
206 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, nodelay,
sizeof (_nodelay));
208 if (bind (fd, addrinfo->ai_addr, addrinfo->ai_addrlen) !=
SOCKET_ERROR &&
#define x_return_val_if_fail(expr, val)
int xmms_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res)
xmms_ipc_write_func write_func
xmms_ipc_destroy_func destroy_func
int xmms_socket_set_nonblock(xmms_socket_t socket)
Tries to set socket to non-blocking mode.
int xmms_sockets_initialize(void)
xmms_ipc_accept_func accept_func
#define XMMS_STRINGIFY(x)
#define x_new0(type, num)
#define XMMS_DEFAULT_TCP_PORT
xmms_ipc_transport_t * xmms_ipc_tcp_server_init(const xmms_url_t *url, int ipv6)
void xmms_freeaddrinfo(struct addrinfo *res)
xmms_ipc_transport_t * xmms_ipc_tcp_client_init(const xmms_url_t *url, int ipv6)
xmms_ipc_read_func read_func
int xmms_socket_valid(xmms_socket_t socket)