/*
- * Copyright (C) 2005-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
#define AI_ADDRCONFIG 0
#endif
-#include <dirent.h>
#include <regex.h>
-#include <openssl/rc4.h>
#include "para.h"
#include "error.h"
-#include "crypt.h"
#include "net.h"
#include "string.h"
#include "list.h"
const char *host, uint16_t port_number,
struct flowopts *fo)
{
- struct addrinfo *local = NULL, *src,
- *remote = NULL, *dst, hints;
+ struct addrinfo *local = NULL, *src = NULL, *remote = NULL,
+ *dst = NULL, hints;
unsigned int l3type = AF_UNSPEC;
int rc, on = 1, sockfd = -1,
socktype = sock_type(l4type);
layer4_name(l4type),
host? host : (passive? "[loopback]" : "[localhost]"),
port, gai_strerror(rc));
- return -E_ADDRESS_LOOKUP;
+ rc = -E_ADDRESS_LOOKUP;
+ goto out;
}
/* Iterate over all src/dst combination, exhausting dst first */
close(sockfd);
PARA_ERROR_LOG("can not set SO_REUSEADDR: %s\n",
strerror(rc));
- return -ERRNO_TO_PARA_ERROR(rc);
+ rc = -ERRNO_TO_PARA_ERROR(rc);
+ break;
}
flowopt_setopts(sockfd, fo);
if (src && (src = src->ai_next)) /* restart inner loop */
dst = remote;
}
+out:
if (local)
freeaddrinfo(local);
if (remote)
flowopt_cleanup(fo);
if (src == NULL && dst == NULL) {
- rc = errno;
+ if (rc >= 0)
+ rc = -E_MAKESOCK;
PARA_ERROR_LOG("can not create %s socket %s#%s.\n",
layer4_name(l4type), host? host : (passive?
"[loopback]" : "[localhost]"), port);
- return -ERRNO_TO_PARA_ERROR(rc);
+ return rc;
}
return sockfd;
}
* This function creates a local socket for sequenced, reliable, two-way,
* connection-based byte streams.
*
- * \return The file descriptor, on success, negative on errors.
+ * \return The file descriptor of the connected socket on success, negative on
+ * errors.
*
* \sa create_local_socket(), unix(7), connect(2).
*/
-int create_remote_socket(const char *name)
+int connect_local_socket(const char *name)
{
struct sockaddr_un unix_addr;
int fd, ret;
+ PARA_DEBUG_LOG("connecting to %s\n", name);
ret = init_unix_addr(&unix_addr, name);
if (ret < 0)
return ret;