src/network.c

changeset 2
0a08f79c320d
parent 1
e5fbb8f9edbe
child 3
3693fd2eb0e9
     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 +}

mercurial