/** * @brief Wrapper to read from a generic socket * @param s The server settings * @return The resulting information, or NULL */ char *proto_gen_read(struct server_data *s) { char *buffer = NULL; int r, sock; sock = open_tcp_client(s->server, s->port); buffer = socket_recv_all(sock, &r); socket_close(sock); return buffer; }
static StreamError refill_socket(SocketStream* stream) { size_t bytes_recv; if(socket_has_data(stream->sock) && socket_recv_all(stream->sock, (void*)stream->start, FILE_BUFFER_SIZE, &bytes_recv) >= 0) { stream->cursor = stream->start; stream->end = stream->start + bytes_recv; return stream->error; } else { return fail_stream(stream, EofError); } }
/** * @brief Wrapper to read and test from a socket * @param sock The socket to read from * @param test The string to test for * @return 0 if successful, -1 if failure */ int proto_read_test(int sock, char *test) { char *b = NULL, *c = NULL; int r = -1; b = socket_recv_all(sock, &r); if (b && r > 0) { c = strstr(b, test); free(b); } return (c == NULL) ? -1 : 0; }
void test_client() { socket_t client_socket = client_create("127.0.0.1", SERVER_PORT); char buffer[] = "Hello,World!"; socket_send(client_socket, buffer, sizeof(buffer)); int len = 0; char* recv = socket_recv_all(client_socket, &len); if (recv){ printf(recv); } close(client_socket); }
/** * @brief Wrapper to send a generic query * @param s The server settings * @param user The data to query with * @return The resulting information, or NULL */ char *proto_gen_write(struct server_data *s, char *data) { int r; char *buffer = NULL; int sock; sock = open_tcp_client(s->server, s->port); if (socket_send_all(sock, data, strlen(data)) == 0) { buffer = socket_recv_all(sock, &r); } socket_close(sock); free(data); return buffer; }
/** * @brief Wrapper to read and test from a socket and return data * @param sock The socket to read from * @param test The string to test for * @param buf Pointer location for result * @return 0 if successful, -1 if failure * * This function first does a recv all and then * performs a search on the resulting data for * the first occurance of the result data. It * then creates a new buffer just past that * result and returns it. */ int proto_read_test_data(int sock, char *test, char *buf) { char *b = NULL, *c = NULL; int r = -1; b = socket_recv_all(sock, &r); if (b && r > 0) { c = strstr(b, test); if (c != NULL) { c += strlen(test); /* jump past result */ buf = xmalloc(strlen(c)); /* copy to new buffer */ strcpy(buf, c); } free(b); } return (c == NULL) ? -1 : 0; }
int Socket::recv_all(void* buffer, size_t size, size_t& bytes_recv) const { return socket_recv_all(sock, buffer, size, &bytes_recv); }