46#include <sys/socket.h>
56 memset ((
void *) &(socket->
Address), 0, sizeof (
struct sockaddr_in)) ;
67 csocket->
Id = socket (AF_INET, SOCK_STREAM, 0) ;
71 perror (
"ERROR :: client socket creation") ;
87 ssocket->
Id = socket (AF_INET, SOCK_STREAM, 0) ;
91 perror (
"ERROR :: server socket creation") ;
96 ssocket->
Address.sin_family = AF_INET ;
97 ssocket->
Address.sin_port = htons (port_number) ;
98 ssocket->
Address.sin_addr.s_addr = htonl (INADDR_ANY) ;
100 if (bind (ssocket->
Id, (
struct sockaddr *) &ssocket->
Address,
101 sizeof (
struct sockaddr_in)) < 0)
103 perror (
"ERROR :: server bind") ;
110 if (listen (ssocket->
Id, 1) < 0)
112 perror (
"ERROR :: server listen") ;
131 strcpy (csocket->
HostName, host_name) ;
135 csocket->
Address.sin_family = AF_INET ;
136 csocket->
Address.sin_port = htons (port_number) ;
138 if (inet_pton (AF_INET, host_name, &(csocket->
Address).sin_addr) <= 0)
140 perror (
"ERROR :: server address creation") ;
147 if (connect (csocket->
Id, (
struct sockaddr *) &csocket->
Address,
148 sizeof (
struct sockaddr_in)) < 0)
150 perror (
"ERROR :: client to server connection") ;
164 socklen_t length =
sizeof (
struct sockaddr_in) ;
168 (ssocket->
Id, (
struct sockaddr *) &(client->
Address), &length) ;
172 perror (
"ERROR :: server accept") ;
181 if (inet_ntop (AF_INET, &client->
Address.sin_addr,
184 perror (
"ERROR :: client name translation") ;
217 ssize_t bwritten = write (socket->
Id, begin, length) ;
229 perror (
"ERROR :: write message failure") ;
237 length -= (size_t) bwritten ;
259 ssize_t bread = read (socket->
Id, &message_length,
sizeof(message_length)) ;
261 if (bread < 0 || bread !=
sizeof(message_length))
263 perror (
"ERROR :: read message length failure") ;
286 while (message_length > 0)
288 bread = read (socket->
Id, begin, message_length) ;
298 perror (
"ERROR :: read failure") ;
306 message_length -= (size_t) bread ;
320 if (close (socket->
Id) != 0)
322 perror (
"ERROR :: Closing network socket") ;
void increase_message_memory(NetworkMessage_t *message, Quantity_t new_size)
Error_t open_client_socket(Socket_t *csocket)
Error_t receive_message_from_socket(Socket_t *socket, NetworkMessage_t *message)
Error_t socket_close(Socket_t *socket)
Error_t connect_client_to_server(Socket_t *csocket, String_t host_name, PortNumber_t port_number)
Error_t send_message_to_socket(Socket_t *socket, NetworkMessage_t *message)
void socket_init(Socket_t *socket)
Error_t open_server_socket(Socket_t *ssocket, PortNumber_t port_number)
Error_t wait_for_client(Socket_t *ssocket, Socket_t *client)
Structure used to store messages to be sent over network.
Structure used to set up and use network connections.
struct sockaddr_in Address
@ TDICE_SUCCESS
The function returns with success.
@ TDICE_FAILURE
The function retuerns with a generic error.