/*****************************************************************************\
 *  net.h - basic network communications for user application I/O
 *****************************************************************************
 *  Copyright (C) 2002 The Regents of the University of California.
 *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
 *  Written by Mark Grondona <grondona1@llnl.gov>, Kevin Tew <tew1@llnl.gov>,
 *  et. al.
 *  CODE-OCEC-09-009. All rights reserved.
 *
 *  This file is part of Slurm, a resource management program.
 *  For details, see <https://slurm.schedmd.com/>.
 *  Please also read the included file: DISCLAIMER.
 *
 *  Slurm is free software; you can redistribute it and/or modify it under
 *  the terms of the GNU General Public License as published by the Free
 *  Software Foundation; either version 2 of the License, or (at your option)
 *  any later version.
 *
 *  In addition, as a special exception, the copyright holders give permission
 *  to link the code of portions of this program with the OpenSSL library under
 *  certain conditions as described in each individual source file, and
 *  distribute linked combinations including the two. You must obey the GNU
 *  General Public License in all respects for all of the code used other than
 *  OpenSSL. If you modify file(s) with this exception, you may extend this
 *  exception to your version of the file(s), but you are not obligated to do
 *  so. If you do not wish to do so, delete this exception statement from your
 *  version.  If you delete this exception statement from all source files in
 *  the program, then also delete it here.
 *
 *  Slurm is distributed in the hope that it will be useful, but WITHOUT ANY
 *  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 *  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 *  details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with Slurm; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
\*****************************************************************************/

#ifndef _NET_H
#define _NET_H

#include <netdb.h>
#include <stdint.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <slurm/slurm.h>

/* open a stream socket on an ephemeral port and put it into
 * the listen state. fd and port are filled in with the new
 * socket's file descriptor and port #.
 *
 * OUT fd - listening socket file descriptor number
 * OUT port - TCP port number in host byte order
 */
extern int net_stream_listen(int *fd, uint16_t *port);

/* set keepalive time on socket */
extern void net_set_keep_alive(int sock);

/*
 * Toggle TCP_NODELAY on socket
 *
 * IN sock - target socket file descriptor
 * IN set - True to set TCP_NODELAY and false to unset TCP_NODELAY
 * IN con_name - connection name for logging
 * RET SLURM_SUCCESS or error
 */
extern int net_set_nodelay(int sock, bool set, const char *con_name);

extern int net_stream_listen_ports(int *, uint16_t *, uint16_t *, bool);

/*
 * dump sockaddr into a string
 * IN addr address to dump
 * IN addrlen size of addr
 * RET ptr to string (must xfree) or NULL
 */
extern char *sockaddr_to_string(const slurm_addr_t *addr, socklen_t addrlen);

/*
 * dump addrinfo into a string
 * IN addr address to dump
 * RET ptr to string (must xfree) or NULL
 */
extern char *addrinfo_to_string(const struct addrinfo *addr);

/*
 * Initialize socket address for named unix socket
 * IN path - path for unix socket
 * RET socket address which caller must check ss_family:
 *	slurm_addr_t.ss_family=AF_UNIX if path is valid
 *	slurm_addr_t.ss_family=AF_UNSPEC if path is not valid
 */
extern slurm_addr_t sockaddr_from_unix_path(const char *path);

#endif /* !_NET_H */
