$Revision: 1.15 $
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
- #include "modules/sk/sk.h"
- #include "include/stubs.h"
- #include <stdlib.h>
- #include <stdio.h>
- #include <ctype.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #include <pthread.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <signal.h>
- #include <stdio.h>
- #include "include/iproutines.h"
- #include <sys/types.h>
- #include <glib.h>
- #include <include/inet6def.h>
- #include <include/erroutines.h>
Preprocessor definitions
String sizes
#define STR_S 63
#define STR_XXL 16383
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
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
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 )
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
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
- &nbs;
- unsigned int timeout
- &nbs;
Prototyped in:
| modules/sk/sk.h
|
Calls:
| bcopy(), bind(), bzero(), close(), connect(), fcntl(), fprintf(), gethostbyname_r(), getsockopt(), memset(), select(), socket()
|
This function reads a single character from a socket.
returns EOF when no character can be read.
int SK_getc ( int sockfd )
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.
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.
This function reads from a socket, until it recieves a linefeed
character. It fills the buffer "str" up to the maximum size "count".
Authors:
ottrey,
marek (modified for meaningful error codes).
Side Effects:
This function will return -1 if the socket is closed during the read operation.
Note that if a single line exceeds the length of count, the extra data
will be read and discarded! You have been warned.
int SK_gets ( int sockfd, char* str, size_t count )
- int SK_gets
- Returns the total_count of bytes read.
- int sockfd
- The socket file descriptor.
- char* str
- The buffer to be written from the socket.
- size_t count
- The number of bytes in the buffer.
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
- &nbs;
- 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:
| modules/sk/sk.h
|
Calls:
| bind(), close(), exit(), listen(), memset(), perror(), setsockopt(), socket()
|
This function writes a single character out to a socket.
int SK_putc ( int sockfd, char ch )
- int SK_putc
- Returns the number of characters written.
- int sockfd
- socket
- char ch
- character
This function writes a character string out to a socket.
char *str The buffer to be written from the socket.
More:
Authors:
ottrey
Side Effects:
This function will return -1 if the socket is closed during the write operation.
int SK_puts ( int sockfd, const char* str )
- int SK_puts
- The total_count of bytes written,
or errors (represented as negative numbers)
- int sockfd
- The socket file descriptor.
- const char* str
- &nbs;
This is just like the read() system call, except that it will make
sure that all your data goes through the socket.
Author:
ottrey
int SK_read ( int sockfd, char* buf, size_t count )
- int SK_read
- Returns the number of bytes read.
- int sockfd
- The socket file descriptor.
- char* buf
- The buffer to be read from the socket.
- size_t count
- The number of bytes in the buffer.
This is just like the write() system call, except that it will
make sure that all data is transmitted.
char *buf The buffer to be written to the socket.
Author:
ottrey
int SK_write ( int sockfd, const char* buf, size_t count )
- int SK_write
- Returns the number of bytes written.
- int sockfd
- The socket file descriptor.
- const char* buf
- &nbs;
- size_t count
- The number of bytes in the buffer.