hints.ai_family = AF_UNSPEC;
#endif
}
- if ((ret = getaddrinfo(address ? address : NULL, port ? port : "548", &hints, &servinfo)) != 0) {
+ if ((ret = getaddrinfo(address ? address : NULL, port, &hints, &servinfo)) != 0) {
LOG(log_error, logtype_dsi, "dsi_tcp_init: getaddrinfo: %s\n", gai_strerror(ret));
- return 0;
+ EC_FAIL;
}
- /* create a socket */
- if (proxy)
- dsi->serversock = -1;
- else {
- /* loop through all the results and bind to the first we can */
- for (p = servinfo; p != NULL; p = p->ai_next) {
- if ((dsi->serversock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
- LOG(log_info, logtype_dsi, "dsi_tcp_init: socket: %s", strerror(errno));
- continue;
- }
+ /* loop through all the results and bind to the first we can */
+ for (p = servinfo; p != NULL; p = p->ai_next) {
+ if ((dsi->serversock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
+ LOG(log_info, logtype_dsi, "dsi_tcp_init: socket: %s", strerror(errno));
+ continue;
+ }
- /*
- * Set some socket options:
- * SO_REUSEADDR deals w/ quick close/opens
- * TCP_NODELAY diables Nagle
- */
+ /*
+ * Set some socket options:
+ * SO_REUSEADDR deals w/ quick close/opens
+ * TCP_NODELAY diables Nagle
+ */
#ifdef SO_REUSEADDR
- flag = 1;
- setsockopt(dsi->serversock, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag));
+ flag = 1;
+ setsockopt(dsi->serversock, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag));
#endif
#if defined(FREEBSD) && defined(IPV6_BINDV6ONLY)
- int on = 0;
- setsockopt(dsi->serversock, IPPROTO_IPV6, IPV6_BINDV6ONLY, (char *)&on, sizeof (on));
+ int on = 0;
+ setsockopt(dsi->serversock, IPPROTO_IPV6, IPV6_BINDV6ONLY, (char *)&on, sizeof (on));
#endif
- #ifdef USE_TCP_NODELAY
#ifndef SOL_TCP
#define SOL_TCP IPPROTO_TCP
#endif
- flag = 1;
- setsockopt(dsi->serversock, SOL_TCP, TCP_NODELAY, &flag, sizeof(flag));
-
- if (bind(dsi->serversock, p->ai_addr, p->ai_addrlen) == -1) {
- close(dsi->serversock);
- LOG(log_info, logtype_dsi, "dsi_tcp_init: bind: %s\n", strerror(errno));
- continue;
- }
-
- if (listen(dsi->serversock, DSI_TCPMAXPEND) < 0) {
- close(dsi->serversock);
- LOG(log_info, logtype_dsi, "dsi_tcp_init: listen: %s\n", strerror(errno));
- continue;
- }
+ flag = 1;
+ setsockopt(dsi->serversock, SOL_TCP, TCP_NODELAY, &flag, sizeof(flag));
- #endif /* USE_TCP_NODELAY */
- break;
+ if (bind(dsi->serversock, p->ai_addr, p->ai_addrlen) == -1) {
+ close(dsi->serversock);
+ LOG(log_info, logtype_dsi, "dsi_tcp_init: bind: %s\n", strerror(errno));
+ continue;
}
- if (p == NULL) {
- LOG(log_error, logtype_dsi, "dsi_tcp_init: no suitable network config for TCP socket");
- freeaddrinfo(servinfo);
- return 0;
+ if (listen(dsi->serversock, DSI_TCPMAXPEND) < 0) {
+ close(dsi->serversock);
+ LOG(log_info, logtype_dsi, "dsi_tcp_init: listen: %s\n", strerror(errno));
+ continue;
}
+
+ break;
+ }
- /* Copy struct sockaddr to struct sockaddr_storage */
- memcpy(&dsi->server, p->ai_addr, p->ai_addrlen);
+ if (p == NULL) {
+ LOG(log_error, logtype_dsi, "dsi_tcp_init: no suitable network config for TCP socket");
freeaddrinfo(servinfo);
- } /* if (proxy) */
+ EC_FAIL;
+ }
+
+ /* Copy struct sockaddr to struct sockaddr_storage */
+ memcpy(&dsi->server, p->ai_addr, p->ai_addrlen);
+ freeaddrinfo(servinfo);
/* Point protocol specific functions to tcp versions */
dsi->proto_open = dsi_tcp_open;