1.1 --- a/src/network.c Wed Feb 05 14:07:43 2014 +0100 1.2 +++ b/src/network.c Sun Feb 23 21:03:35 2014 +0100 1.3 @@ -31,14 +31,21 @@ 1.4 #include <string.h> 1.5 #include "network.h" 1.6 1.7 -int server_bind(Server *server) { 1.8 - server->fd = socket(server->info->ai_family, 1.9 - server->info->ai_socktype, server->info->ai_protocol); 1.10 +#define new_socket() socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 1.11 + 1.12 +int net_create(Server *server, char* port) { 1.13 + server->info = NULL; 1.14 + 1.15 + struct sockaddr_in addr; 1.16 + addr.sin_family = AF_INET; 1.17 + addr.sin_addr.s_addr = INADDR_ANY; 1.18 + addr.sin_port = htons(atoi(port)); 1.19 + 1.20 + server->fd = new_socket(); 1.21 if (server->fd > -1) { 1.22 int true = 1; 1.23 setsockopt(server->fd, SOL_SOCKET, SO_REUSEADDR, &true, sizeof(int)); 1.24 - if (bind(server->fd, 1.25 - server->info->ai_addr, server->info->ai_addrlen)) { 1.26 + if (bind(server->fd, (struct sockaddr*)&addr, sizeof(addr))) { 1.27 server->fd = -1; 1.28 return 1; 1.29 } else { 1.30 @@ -49,10 +56,6 @@ 1.31 } 1.32 } 1.33 1.34 -int net_create(Server *server, char* port) { 1.35 - return net_find(server, "localhost", port) || server_bind(server); 1.36 -} 1.37 - 1.38 int getaddrinfo_intrnl(char *host, char *port, struct addrinfo **info) { 1.39 struct addrinfo hints; 1.40 memset(&hints, 0, sizeof(hints)); 1.41 @@ -82,21 +85,17 @@ 1.42 } 1.43 1.44 int net_connect(Server *server) { 1.45 - struct addrinfo *info; 1.46 - if (getaddrinfo_intrnl("localhost", NULL, &info)) { 1.47 + 1.48 + Client* client = calloc(1, sizeof(Client)); 1.49 + client->fd = -1; 1.50 + server->fd = new_socket(); 1.51 + server->client = client; 1.52 + 1.53 + if (server->fd == -1) { 1.54 return 1; 1.55 } 1.56 1.57 - Client* client = calloc(1, sizeof(Client)); 1.58 - client->fd = socket(info->ai_family, info->ai_socktype, info->ai_protocol); 1.59 - server->client = client; 1.60 - 1.61 - freeaddrinfo(info); 1.62 - if (client->fd == -1) { 1.63 - return 1; 1.64 - } 1.65 - 1.66 - return connect(client->fd, server->info->ai_addr, server->info->ai_addrlen); 1.67 + return connect(server->fd, server->info->ai_addr, server->info->ai_addrlen); 1.68 } 1.69 1.70 int net_destroy(Server *server) { 1.71 @@ -113,3 +112,19 @@ 1.72 1.73 return EXIT_SUCCESS; 1.74 } 1.75 + 1.76 +void net_send(int socket, uint32_t code, void *data, size_t len) { 1.77 + code = htonl(code); 1.78 + send(socket, &code, sizeof(uint32_t), 0); 1.79 + send(socket, data, len, 0); 1.80 +} 1.81 + 1.82 +int net_recieve_code(int socket) { 1.83 + uint32_t code; 1.84 + recv(socket, &code, sizeof(uint32_t), 0); 1.85 + return ntohl(code); 1.86 +} 1.87 + 1.88 +void net_recieve_data(int socket, void *data, size_t len) { 1.89 + recv(socket, data, len, 0); 1.90 +}