Source: ../../libxipc/sockutil.hh


Annotated List
Files
Globals
Hierarchy
Index
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-

// Copyright (c) 2001,2002 International Computer Science Institute
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software")
// to deal in the Software without restriction, subject to the conditions
// listed in the XORP LICENSE file. These conditions include: you must
// preserve this copyright notice, and you cannot mention the copyright
// holders in advertising related to the Software without their permission.
// The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
// notice is a summary of the XORP LICENSE file; the license in that file is
// legally binding.

// $XORP: xorp/libxipc/sockutil.hh,v 1.1.1.1 2002/12/11 23:56:03 hodson Exp $

/* Some helper functions for sockets */

#ifndef __XORPIPC_SOCKUTIL_HH__
#define __XORPIPC_SOCKUTIL_HH__

#include <string>

#include <sys/types.h>

#include <netinet/in.h>
#include <sys/param.h>
#include <sys/socket.h>

enum IPSocketType { UDP = IPPROTO_UDP, TCP = IPPROTO_TCP };

/**
 * @return fd of socket or -1 if unsuccessful.
 */
int create_connected_ip_socket(IPSocketType t, const string& addr_slash_port);
			       
/**
 * @return fd of socket or -1 if unsuccessful.
 */
int create_connected_ip_socket(IPSocketType t, 
			       const string& addr, uint16_t port);

/**
 * @return fd of socket or -1 if unsuccessful.
 */
int create_listening_ip_socket(IPSocketType ist, uint16_t port = 0);

/**
 * Release state associated with socket and close it.
 */
void close_socket(int fd);

/**
 * @return true if addr and port were filled in.
 */
bool get_local_socket_details(int fd, string& addr, uint16_t& port);

/**
 * @return true if addr and port were filled in.
 */
bool get_remote_socket_details(int fd, string& addr, uint16_t& port);

/**
 * Get socket send buffer size.
 *
 * @return size or -1 if size could not be read.
 */
int get_socket_sndbuf_bytes(int fd);

/**
 * Get socket receive buffer size.
 *
 * @return size or -1 if size could not be read.
 */
int get_socket_rcvbuf_bytes(int fd);

/**
 * Set socket send buffer size.
 *
 * @return size or -1 if size could not be set.
 */
int set_socket_sndbuf_bytes(int fd, uint32_t bytes);

/**
 * Set socket receive buffer size.
 *
 * @return size or -1 if size could not be set.
 */
int set_socket_rcvbuf_bytes(int fd, uint32_t bytes);

/**
 * @return address slash port 
 */
string address_slash_port(const string& addr, uint16_t port);

/**
 * @return true if address_slash_port was split successfully.
 */
bool split_address_slash_port(const string& address_slash_port,
			      string& address, uint16_t& port);

/**
 * @param address to be resolved.
 * @param network address.
 * @return true if address resolves.
 */

bool address_lookup(const string& addr, in_addr& ia);

/**
 * @return number of network interfaces reported by OS.
 */
uint32_t if_count();

/**
 * Query interface parameters.
 *
 * @param index of interface [1..if_count()].
 * @param reference to string to take interface's name.
 * @param reference to in_addr to take interface's IPv4 address.
 * @param reference to uint16_t to take interface's flags.
 * 
 * @return true on success, false on failure.
 */
bool if_probe(uint32_t index, string& name, in_addr& addr, uint16_t& flags);

/**
 * Set preferred interface for IPC communication.
 *
 * @return true on success, false if addr is not a valid interface address or
 * is marked as down.
 */
bool if_set_preferred(in_addr addr);

/**
 * Get preferred interface for IPC communication.  If not set by
 * if_set_preferred, it is the first valid non-loopback interface.
 * Otherwise it is the loopback interface.
 */
in_addr if_get_preferred();

#endif // __XORPIPC_SOCKUTIL_HH__

Generated by: pavlin on possum.icir.org on Wed Dec 11 16:50:42 2002, using kdoc 2.0a54+XORP.