1 /**************************************************************************
2 ** (c) Copyright 2012, Andromeda Technology & Automation
3 ***************************************************************************
4 ** MODULE INFORMATION *
5 ***********************
6 ** FILE NAME : socket.h
7 ** SYSTEM NAME : Network and socket classes
8 ** VERSION NUMBER : 0.1
10 ** DESCRIPTION : SocketAddress, Socket and derived classes definition
12 ** EXPORTED OBJECTS : class SocketAddress, class UNIXSocketAddress,
13 ** class IPSocketAddress,
14 ** class Socket, class StreamSocket, class DatagramSocket
17 ***************************************************************************
18 ** ADMINISTRATIVE INFORMATION *
19 ********************************
20 ** ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
21 ** CREATION DATE : Mar 02, 2012
22 ** LAST UPDATE : Mar 08, 2012
24 **************************************************************************/
26 #include <sys/socket.h> // For types and constants (like SOCK_STREAM)
27 #include "inetaddress.h"
30 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31 ** NAME : SocketAddress - Abstract baseclass that defines a socket address.
34 ** METHODS : address_family() : Address family of the address: AF_UNIX, AF_INET or AF_INET6
35 ** get_sockaddr() : A sockaddr pointer usefull for bind(2) and connect(2)
36 ** get_socklen() : Length of the sockaddr structure.
43 ** LAST MODIFIED : Mar 08, 2012
44 **+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
52 virtual int address_family() = 0;
54 virtual struct sockaddr * get_sockaddr() = 0;
56 virtual socklen_t get_socklen() = 0;
59 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
60 ** NAME : IPSocketAddress - A socket address for IP sockets
63 ** METHODS : address_family() : Address family of the address: AF_UNIX, AF_INET or AF_INET6
64 ** get_sockaddr() : A sockaddr pointer usefull for bind(2) and connect(2)
65 ** get_socklen() : Length of the sockaddr structure.
72 ** LAST MODIFIED : Mar 08, 2012
73 **+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
76 class IPSocketAddress : public SocketAddress
78 InternetAddress IPaddress;
81 struct sockaddr_in in;
82 struct sockaddr_in6 in6;
86 IPSocketAddress(InternetAddress ip, Port p)
94 return IPaddress.address_family();
96 struct sockaddr * get_sockaddr();
97 socklen_t get_socklen();
100 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
101 ** NAME : Socket - Abstract baseclass that defines a socket.
104 ** METHODS : Listen() : Create a server socket
105 ** Close() : Close the UNIX socket.
112 ** LAST MODIFIED : Mar 08, 2012
113 **+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
120 int fd; // File descriptor of the UNIX socket.
145 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
146 ** NAME : StreamSocket - A stream (TCP) socket.
149 ** METHODS : Listen() : Create a server socket
150 ** Close() : Close the UNIX socket.
157 ** LAST MODIFIED : Mar 08, 2012
158 **+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
161 class StreamSocket : public Socket
165 int Connect(SocketAddress &sa);
166 int Listen(SocketAddress &sa);
167 StreamSocket Accept();
169 ssize_t Read(void *buf, size_t count)
171 return read(fd, buf, count);
174 ssize_t Write(const void *buf, size_t count)
176 return write(fd, buf, count);