You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
#include "client.h"
|
|
|
|
client_t* client_open(conn_handler handler) {
|
|
struct sockaddr_in servaddr;
|
|
client_t *client = malloc(sizeof(client_t));
|
|
if(NULL == handler) {
|
|
printf("client_open: received empty handler, stopping");
|
|
return NULL;
|
|
}
|
|
if (NULL == client) {
|
|
printf("client_open: malloc failed");
|
|
return NULL;
|
|
}
|
|
client->conn = connection_create(CONN_TYPE_CLIENT);
|
|
if (NULL == client->conn) {
|
|
free(client);
|
|
return NULL;
|
|
}
|
|
client->handler = handler;
|
|
client->conn->fd = socket(AF_INET, SOCK_STREAM, 0);
|
|
if (-1 == client->conn->fd) {
|
|
printf("client_listen: failed to create endpoint.\n");
|
|
return NULL;
|
|
}
|
|
return client;
|
|
}
|
|
|
|
int client_connect(client_t *client) {
|
|
struct sockaddr_in servaddr;
|
|
int servaddr_len = 0;
|
|
|
|
if(client == NULL) {
|
|
return -1;
|
|
}
|
|
|
|
servaddr.sin_family = AF_INET;
|
|
servaddr.sin_addr.s_addr = inet_addr(SERVERIP);
|
|
servaddr.sin_port = htons(PORT);
|
|
|
|
if (0 != connect(, MAX_CLIENTS)) {
|
|
printf("client_accept: listen failed\n");
|
|
return -1;
|
|
}
|
|
printf("client_accept: listening\n");
|
|
servaddr_len = sizeof(servaddr);
|
|
connfd = connect(client->conn->fd, &servaddr, &servaddr_len);
|
|
if(0 >= connfd) {
|
|
printf("client_accept: connection to client failed, ");
|
|
return -1;
|
|
} else {
|
|
client->handler(client->conn->fd);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int client_close(client_t *client) {
|
|
int err = 0;
|
|
if (NULL == client) {
|
|
return 0;
|
|
}
|
|
if (0 != connection_destroy(client->conn)) {
|
|
printf("client_close: closing socket failed\n");
|
|
err = -1;
|
|
}
|
|
free(client);
|
|
return err;
|
|
}
|
|
|