File sk/sk_socket.c

  $Revision: 1.22 $

Socket module - routines facilitating calls to socket library.
Status: NOT REVUED, TESTED
Basic code adapted by Chris Ottrey from http://www.ibrado.com/sock-faq/sfaq.html#faq65 - sample source code.

Included Files


Preprocessor definitions

Wait for an incoming connection on the specified socket
int SK_accept_connection The socket for communicating to the client
int listening_socket The socket that the server is bound to
Authors: joao, marek.

#define MAX_ACCEPT_ERRORS 3


Global Variable Lock

pthread_mutex_t Lock
Included from /home/shane/release/RIP/include/ca_defs.h
Visible in:  aa/aa.c
   ac/ac_persistence.c
   ac/access_control.c
   au/AU_util.c
   ca/ca_configFns.c
   ca/ca_initFn.c
   ca/ca_sanityCheck.c
   ca/ca_sourceLoader.c
   ca/ca_values.c
   co/constants.c
   df/defs.c
   er/er.c
   er/er_arrays.c
   er/er_macro.c
   er/er_paths.c
   er/er_print.c
   ip/ip.c
   ma/bitmask.c
   mm/mm.c
   nh/nh.c
   pa/gpg.c
   pa/spawn.c
   pc/pc_commands.c
   pc/protocol_config.c
   pm/pm_serials.c
   pm/protocol_mirror.c
   pr/properties.c
   pw/protocol_whois.c
   qc/mg_getopt.c
   qc/query_command.c
   qi/query_instructions.c
   rp/rp_convert.c
   rp/rp_load.c
   rp/rp_search.c
   rp/rp_tree.c
   rp/rp_update.c
   rx/rx_node.c
   rx/rx_print.c
   rx/rx_search.c
   rx/rx_tree.c
   sk/cd_socket.c
   sk/cd_watchdog.c
   sk/sk_socket.c
Used in: ca_get_adminIntElement()ca/ca_configFns.c
  ca_get_adminStrElement()ca/ca_configFns.c
  ca_get_boolean()ca/ca_configFns.c
  ca_get_dirlist()ca/ca_configFns.c
  ca_get_int()ca/ca_configFns.c
  ca_get_string()ca/ca_configFns.c
  ca_set_boolean()ca/ca_configFns.c
  ca_srchandle2Intelement()ca/ca_configFns.c
  ca_srchandle2Strelement()ca/ca_configFns.c

Global Function SK_accept_connection()

   Wait for an incoming connection on the specified socket

int SK_accept_connection The socket for communicating to the client
Authors: joao, marek.
int SK_accept_connection ( int listening_socket )
int listening_socket
The socket that the server is bound to
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: CO_get_do_server()co/constants.c
  ER_dbg_va()er/er.c
  ER_perror()er/er.c
  ___errno(), accept(), fprintf(), strerror()

Global Function SK_atoport()

   Take a service name, and a service type, and return a port number.  If the
   service name is not found, it tries it as a decimal number.  The number
   returned is byte ordered for the network.

char *service Service name (or port number).
char *proto Protocol (eg "tcp").
Author: ottrey.
int SK_atoport ( const char* service, const char* proto )
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: getservbyname_r(), strtol()

Global Function SK_close()



Author: ottrey
int SK_close ( int socket )
int SK_close
wrapper around closing the socket. Returns the value returned by close(2)
int socket
socket to be closed
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: ER_dbg_va()er/er.c
  fdwrap_close()
Called by: SK_cd_close()sk/cd_socket.c

Global Function SK_connect()



int port port to connect to
int timeout in seconds
Author: marek
er_ret_t SK_connect ( int* sock, char* hostname, unsigned int port, unsigned int timeout )
er_ret_t SK_connect
wrapper around connect(), doing non-blocking connection with timeout
int* sock
pointer to the storage for socket descriptor
char* hostname
host to connect to
unsigned int port
 
unsigned int timeout
 
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: ___errno(), bcopy(), bind(), bzero(), connect(), fcntl(), fdwrap_close(), gethostbyname_r(), getsockopt(), memset(), select(), socket()

Global Function SK_getpeerip()

  This function will check the ip of the connected peer and store it in the
  ip_addr_t structure defined in the IP module.

  Author:
	marek
int SK_getpeerip ( int sockfd, ip_addr_t* ip )
int SK_getpeerip
returns 0 on success, -1 on failure.
int sockfd
The socket descriptor (file will result in -1)
ip_addr_t* ip
Pointer to where the address should be stored.
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: IP_addr_s2b()ip/ip.c
  getpeername(), memset()
Called by: PC_interact()pc/protocol_config.c
  PM_interact()pm/protocol_mirror.c
  SK_cd_make()sk/cd_socket.c

Global Function SK_getpeername()

  This function will tell you who is at the other end of a connected stream socket.

  Authors:
        ottrey,
	marek (modified error handling, made MT-Safe).
char* SK_getpeername ( int sockfd )
char* SK_getpeername
Returns allocated string with the IP in it, or "--" if the descriptor is not a socket, or NULL on error.
int sockfd
The socket or file descriptor.
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: inet_ntop()ip/inet_ntop.c
  UT_malloc_real(), UT_strdup_real(), ___errno(), getpeername(), wr_real_string()
Called by: PC_interact()pc/protocol_config.c
  PM_interact()pm/protocol_mirror.c
  PW_interact()pw/protocol_whois.c
  SK_cd_make()sk/cd_socket.c
  er_path_safeguard()er/er_paths.c

Global Function SK_getsock()



unsigned port The port to listen on. Ports < 1024 are reserved for the root user. Host byte order.
Authors: ottrey, joao, marek (added htons conversion for port).
int SK_getsock ( int socket_type, unsigned h_port, int backlog, uint32_t bind_address )
int SK_getsock
This function creates a socket and binds to it. Returns the number of the created descriptor/listening socket.
int socket_type
SOCK_STREAM or SOCK_DGRAM (TCP or UDP sockets)
unsigned h_port
 
int backlog
Size of the backlog queue to be set on that socket.
uint32_t bind_address
Address to bind to, in network order.
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: ___errno(), bind(), exit(), fdwrap_close(), fprintf(), inet_ntoa(), listen(), memset(), perror(), setsockopt(), socket(), strerror()

Global Function SK_putc()

  This function writes a single character out to a socket.
int SK_putc ( int sockfd, char ch, const struct timeval* timeout )
int SK_putc
Returns the number of characters written.
int sockfd
socket
char ch
character
const struct timeval* timeout
Maximum time to wait between each write() call, or NULL for "forever".
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: SK_write()sk/sk_socket.c

Global Function SK_puts()

   This function writes a character string out to a socket.

char *str The buffer to be written from the socket.
int SK_puts ( int sockfd, const char* str, const struct timeval* timeout )
int SK_puts
The total_count of bytes written, or -1 on hangup, error, or timeout
int sockfd
The socket file descriptor.
const char* str
 
const struct timeval* timeout
Maximum time to wait between each write() call, or NULL for "forever".
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: SK_write()sk/sk_socket.c
  strlen()
Called by: SK_cd_puts()sk/cd_socket.c

Global Function SK_write()

int SK_write ( int sockfd, const char* buf, int count, const struct timeval* timeout, int* count_sent )
int SK_write
Returns: -1 on error 0 on timeout 1 on success (all bytes written)
int sockfd
The socket file descriptor.
const char* buf
The buffer to be written to the socket.
int count
The number of bytes in the buffer.
const struct timeval* timeout
Maximum time to wait between each write() call, or NULL for "forever".
int* count_sent
Set to the number of bytes sucessfully written. This value is always valid, although it will be less than the total number of bytes to send if the function returns -1 or 0. NULL may be sent if the caller does not care about the number of bytes sent on failure.
Prototyped in: /home/shane/release/RIP/include/sk.h
Calls: ER_dbg_va()er/er.c
  ER_perror()er/er.c
  ___errno(), memset(), select(), strerror(), write()
Called by: SK_putc()sk/sk_socket.c
  SK_puts()sk/sk_socket.c

Local Function asctime_r()

static char* asctime_r ( const struct tm* __tm, char* __buf )
Included from: /usr/include/time.h
Calls: __posix_asctime_r()

Local Function ctime_r()

static char* ctime_r ( const time_t* __time, char* __buf )
Included from: /usr/include/time.h
Calls: __posix_ctime_r()

Local Function getlogin_r()

static int getlogin_r ( char* __name, int __len )
Included from: /usr/include/unistd.h
Calls: __posix_getlogin_r()

Local Function readdir_r()

static int readdir_r ( DIR* __dp, struct dirent* __ent, struct dirent** __res )
Included from: /usr/include/dirent.h
Calls: __posix_readdir_r()

Local Function sigwait()

static int sigwait ( const sigset_t* __setp, int* __signo )
Included from: /usr/include/signal.h
Calls: __posix_sigwait()

Local Function ttyname_r()

static int ttyname_r ( int __fildes, char* __buf, size_t __size )
Included from: /usr/include/unistd.h
Calls: __posix_ttyname_r()