X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=net.c;h=1fece043586cddc782791d0ec18af45881797c5f;hp=50243673eaf9f3e22edf7aa0cea0247b5917cdeb;hb=74f1fd1880177e9d58213e4ec44e9980434820d3;hpb=7adbab371baac475d54c7672ff523316d7151327 diff --git a/net.c b/net.c index 50243673..1fece043 100644 --- a/net.c +++ b/net.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2005 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2005 Andre Noll , see file COPYING. */ /** \file net.c Networking-related helper functions. */ @@ -44,7 +40,7 @@ * default of 32 if not specified. * * \return Pointer to \a addr if successful, NULL on error. - * \sa RFC 4632 + * \sa RFC 4632. */ char *parse_cidr(const char *cidr, char *addr, ssize_t addrlen, @@ -104,7 +100,7 @@ static bool is_v4_dot_quad(const char *address) * \param host The host string to check. * \return True if \a host passes the syntax checks. * - * \sa RFC 3986, 3.2.2; RFC 1123, 2.1; RFC 1034, 3.5 + * \sa RFC 3986, 3.2.2; RFC 1123, 2.1; RFC 1034, 3.5. */ static bool host_string_ok(const char *host) { @@ -146,7 +142,7 @@ static bool host_string_ok(const char *host) * \a host and \a port are undefined. If no port number was present in \a url, * \a port is set to -1. * - * \sa RFC 3986, 3.2.2/3.2.3 + * \sa RFC 3986, 3.2.2/3.2.3. */ char *parse_url(const char *url, char *host, ssize_t hostlen, @@ -191,7 +187,7 @@ failed: * \param transport Transport protocol name (e.g. "udp", "tcp"), or NULL. * \return Pointer to static result buffer. * - * \sa getservent(3), services(5), nsswitch.conf(5) + * \sa getservent(3), services(5), nsswitch.conf(5). */ const char *stringify_port(int port, const char *transport) { @@ -215,7 +211,7 @@ const char *stringify_port(int port, const char *transport) * * \param l4type The symbolic name of the transport-layer protocol. * - * \sa ip(7), socket(2) + * \sa ip(7), socket(2). */ static inline int sock_type(const unsigned l4type) { @@ -247,7 +243,7 @@ static const char *layer4_name(const unsigned l4type) * directly after makesock(). The 'pre_conn_opt' structure is for internal use * only and should not be visible elsewhere. * - * \sa setsockopt(2), makesock() + * \sa setsockopt(2), \ref makesock(). */ struct pre_conn_opt { int sock_level; /**< Second argument to setsockopt() */ @@ -288,7 +284,7 @@ struct flowopts *flowopt_new(void) * \param val The value to set \a opt to. * \param len Length of \a val. * - * \sa setsockopt(2) + * \sa setsockopt(2). */ void flowopt_add(struct flowopts *fo, int lev, int opt, const char *name, const void *val, int len) @@ -429,15 +425,20 @@ int makesock_addrinfo(unsigned l4type, bool passive, struct addrinfo *ai, for (; ai; ai = ai->ai_next) { int fd; ret = socket(ai->ai_family, sock_type(l4type), l4type); - if (ret < 0) + if (ret < 0) { + PARA_NOTICE_LOG("socket(): %s\n", strerror(errno)); continue; + } fd = ret; flowopt_setopts(fd, fo); if (!passive) { - if (connect(fd, ai->ai_addr, ai->ai_addrlen) == 0) - return fd; - close(fd); - continue; + if (connect(fd, ai->ai_addr, ai->ai_addrlen) < 0) { + PARA_NOTICE_LOG("connect(): %s\n", + strerror(errno)); + close(fd); + continue; + } + return fd; } /* * Reuse the address on passive sockets to avoid failure on @@ -446,10 +447,12 @@ int makesock_addrinfo(unsigned l4type, bool passive, struct addrinfo *ai, */ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) { + PARA_NOTICE_LOG("setsockopt(): %s\n", strerror(errno)); close(fd); continue; } if (bind(fd, ai->ai_addr, ai->ai_addrlen) < 0) { + PARA_NOTICE_LOG("bind(): %s\n", strerror(errno)); close(fd); continue; } @@ -500,16 +503,15 @@ int makesock(unsigned l4type, bool passive, const char *host, uint16_t port_numb * * \param l4type The transport-layer type (\p IPPROTO_xxx). * \param port The decimal port number to listen on. - * \param fo Flowopts (if any) to set before starting to listen. * * \return Positive integer (socket descriptor) on success, negative value * otherwise. * - * \sa makesock(), ip(7), ipv6(7), bind(2), listen(2). + * \sa \ref makesock(), ip(7), ipv6(7), bind(2), listen(2). */ -int para_listen(unsigned l4type, uint16_t port, struct flowopts *fo) +int para_listen_simple(unsigned l4type, uint16_t port) { - int ret, fd = makesock(l4type, 1, NULL, port, fo); + int ret, fd = makesock(l4type, 1, NULL, port, NULL); if (fd > 0) { ret = listen(fd, BACKLOG); @@ -551,7 +553,7 @@ static bool SS_IS_ADDR_V4MAPPED(const struct sockaddr_storage *ss) * \param ss Container of IPv4/6 address. * \return Pointer to normalized address (may be static storage). * - * \sa RFC 3493 + * \sa RFC 3493. */ static const struct sockaddr * normalize_ip_address(const struct sockaddr_storage *ss) @@ -624,7 +626,7 @@ int generic_max_transport_msg_size(int sockfd) * \return A static character string identifying hostname and port of the * chosen side in numeric host:port format. * - * \sa getsockname(2), getpeername(2), parse_url(), getnameinfo(3), + * \sa getsockname(2), getpeername(2), \ref parse_url(), getnameinfo(3), * services(5), nsswitch.conf(5). */ char *remote_name(int fd) @@ -735,7 +737,7 @@ __must_check int recv_bin_buffer(int fd, char *buf, size_t size) * * \return The return value of the underlying call to \a recv_bin_buffer(). * - * \sa recv_bin_buffer() + * \sa \ref recv_bin_buffer() */ int recv_buffer(int fd, char *buf, size_t size) { @@ -914,7 +916,7 @@ err: * \return The file descriptor of the connected socket on success, negative on * errors. * - * \sa create_local_socket(), unix(7), connect(2). + * \sa \ref create_local_socket(), unix(7), connect(2). */ int connect_local_socket(const char *name) { @@ -956,8 +958,7 @@ int recv_cred_buffer(int fd, char *buf, size_t size) * \return On success, this call returns the number of bytes sent. On errors, * \p -E_SENDMSG is returned. * - * \sa \ref recv_cred_buffer, sendmsg(2), socket(7), unix(7), okir's Black Hats - * Manual. + * \sa \ref recv_cred_buffer, sendmsg(2), socket(7), unix(7). */ ssize_t send_cred_buffer(int sock, char *buf) {