commit 97328d55af30493615f5eff43d910462cc46ac8f
parent ad0e4c4b9baa1e4d41afcad5a38c735220cc943b
Author: Jacob R. Edwards <jacobouno@protonmail.com>
Date:   Wed, 23 Dec 2020 22:49:51 -0800
Revise networking functions
The major change is error handling in what is now gph_recvto():
- Print a generic error message on timeout or poll error
- Simply return wfclose()
Diffstat:
| M | main.c | | | 31 | ++++++++++++------------------- | 
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/main.c b/main.c
@@ -228,10 +228,10 @@ too_big:
 }
 
 int
-gph_request(int sock, const char *request)
+gph_send(int sock, const char *message)
 {
-	if (send(sock, request, strlen(request), 0) == -1) {
-		warn("unable to send request");
+	if (send(sock, message, strlen(message), 0) == -1) {
+		warn("unable to send message");
 		return 1;
 	}
 	if (shutdown(sock, SHUT_WR)) {
@@ -242,7 +242,7 @@ gph_request(int sock, const char *request)
 }
 
 int
-gph_write_resp(int sock, const char *path)
+gph_recvto(int sock, const char *path)
 {
 	FILE *fp;
 	char buf[CHUNK_SIZE];
@@ -251,12 +251,8 @@ gph_write_resp(int sock, const char *path)
 
 	pfd.fd = sock;
 	pfd.events = POLLRDNORM;
-	switch (poll(&pfd, 1, timeout)) {
-	case -1:
-		warn("poll");
-		return 1;
-	case 0:
-		warnx("timeout.");
+	if (poll(&pfd, 1, timeout) < 1) {
+		warn("Unable to recieve response");
 		return 1;
 	}
 
@@ -264,7 +260,6 @@ gph_write_resp(int sock, const char *path)
 	if (fp == NULL)
 		return 1;
 
-	/* TODO: exclude ".\r\n" terminator */
 	while ((bytes = recv(sock, buf, sizeof(buf), 0)) > 0) {
 		if (fwrite(buf, 1, bytes, fp) != (size_t)bytes) {
 			wfclose(fp);
@@ -272,13 +267,11 @@ gph_write_resp(int sock, const char *path)
 		}
 	}
 
-	if (wfclose(fp))
-		return 1;
-	return 0;
+	return wfclose(fp);
 }
 
 int
-gph_write(const char **addr, const char *path)
+gopher(const char **addr, const char *path)
 {
 	int sock;
 
@@ -286,8 +279,8 @@ gph_write(const char **addr, const char *path)
 	if (sock == -1)
 		return 1;
 
-	if (gph_request(sock, addr[AR_PATH]) != 0 ||
-	    gph_write_resp(sock, path) != 0) {
+	if (gph_send(sock, addr[AR_PATH]) != 0 ||
+	    gph_recvto(sock, path) != 0) {
 		close(sock);
 		return 1;
 	}
@@ -470,7 +463,7 @@ cfetch(int argc, const char **argv, int i, const char **request)
 		return ERROR;
 	}
 
-	if (gph_write(reqtoaddr(request), output) != 0)
+	if (gopher(reqtoaddr(request), output) != 0)
 		return ERROR;
 	warnx("'%s/%s' written to '%s'", request[GI_HOST], request[GI_PATH], output);
 	return 0;
@@ -630,7 +623,7 @@ gawk(const char **addr)
 		mycache = 0;
 	else {
 		mycache = 1;
-		if (gph_write(addr, cache) == 1)
+		if (gopher(addr, cache) == 1)
 			return 0;	/* let the user handle it */
 		done = run_filters(cache, NULL, 0, NULL, cprintn);
 	}