#include "client.h" int client_open(char *servip, int16_t port) { struct sockaddr_in servaddr; size_t servaddr_len = 0; int connfd = 0; connfd = socket(AF_INET, SOCK_STREAM, 0); if (-1 == connfd) { printf("client_listen: failed to create endpoint.\n"); return -1; } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(servip); servaddr.sin_port = htons(port); servaddr_len = sizeof(servaddr); if (0 != connect(connfd, (const struct sockaddr *) &servaddr, servaddr_len)) { printf("client_accept: connection to server failed\n"); close(connfd); return -1; } return connfd; } int client_connect(conn_handler handler, char *servip, int16_t port) { int connfd = 0; char buffer[MAX_BUFSIZE]; int ret = 0; int len = 0; connfd = client_open(servip, port); if(0 >= connfd) { return -1; } bzero(buffer, MAX_BUFSIZE); for (ret = 0; 0 == ret;) { ret = handler(buffer); if(0 < ret) break; if (0 >= write(connfd, buffer, strlen(buffer))) { printf("client_connect: cannot write to socket\n"); ret = -1; } if(0 != ret) break; bzero(buffer, MAX_BUFSIZE); len = read(connfd, buffer, sizeof(buffer)); if (0 > len) { printf("client_connect: cannot read from socket\n"); ret = -1; } else if (0 == len) { printf("client_connect: server closed connection\n"); ret = 1; } } if (0 != close(connfd)) { printf("client_connect: failed to close server connection properly\n"); } return ret; }