diff --git a/src/integration.c b/src/integration.c
index 9da6e2f..4b1492c 100644
--- a/src/integration.c
+++ b/src/integration.c
@@ -183,7 +183,7 @@
 			ackNum = atoi(&cmd[4]);
 			vim_snprintf(buf, sizeof(buf),
 					       NOCATGETS("ack %d\n"), ackNum);
-			write(sd, buf, strlen(buf));
+			(void)write(sd, buf, strlen(buf));
 		} else if (strncmp(cmd,
 		    NOCATGETS("addMarkType "), 12) == 0) {
 			int idx;
@@ -280,7 +280,7 @@
 			vim_snprintf(buf, sizeof(buf),
 					     NOCATGETS("markLine %s %d %d\n"),
 			    file, markid, line);
-			write(sd, buf, strlen(buf));
+			(void)write(sd, buf, strlen(buf));
 		} else if (cmd[1] == 'o' && cmd[4] == 'L' &&
 		    strncmp(cmd, NOCATGETS("gotoLine "), 9) == 0) {
 			char *file;
@@ -729,10 +729,10 @@
 		workshop_get_editor_name(),
 		PROTOCOL_VERSION,
 		workshop_get_editor_version());
-	write(sd, buf, strlen(buf));
+	(void)write(sd, buf, strlen(buf));
 
 	vim_snprintf(buf, sizeof(buf), NOCATGETS("ack 1\n"));
-	write(sd, buf, strlen(buf));
+	(void)write(sd, buf, strlen(buf));
 }
 
 void	workshop_disconnect()
@@ -1059,7 +1059,7 @@
 	char buffer[2*MAXPATHLEN];
 	vim_snprintf(buffer, sizeof(buffer),
 			NOCATGETS("deletedFile %s\n"), filename);
-	write(sd, buffer, strlen(buffer));
+	(void)write(sd, buffer, strlen(buffer));
 }
 #endif
 
@@ -1068,7 +1068,7 @@
 	char buffer[2*MAXPATHLEN];
 	vim_snprintf(buffer, sizeof(buffer),
 			NOCATGETS("deletedFile %s %d\n"), filename, lineno);
-	write(sd, buffer, strlen(buffer));
+	(void)write(sd, buffer, strlen(buffer));
 }
 
 void workshop_file_opened(char *filename, int readOnly)
@@ -1076,7 +1076,7 @@
 	char buffer[2*MAXPATHLEN];
 	vim_snprintf(buffer, sizeof(buffer),
 			NOCATGETS("loadedFile %s %d\n"), filename, readOnly);
-	write(sd, buffer, strlen(buffer));
+	(void)write(sd, buffer, strlen(buffer));
 }
 
 
@@ -1085,7 +1085,7 @@
 	char buffer[2*MAXPATHLEN];
 	vim_snprintf(buffer, sizeof(buffer),
 			NOCATGETS("savedFile %s\n"), filename);
-	write(sd, buffer, strlen(buffer));
+	(void)write(sd, buffer, strlen(buffer));
 
 	/* Let editor report any moved marks that the eserve client
 	 * should deal with (for example, moving location-based breakpoints) */
@@ -1098,7 +1098,7 @@
 	char buffer[2*MAXPATHLEN];
 	vim_snprintf(buffer, sizeof(buffer),
 			NOCATGETS("modifiedFile %s\n"), filename);
-	write(sd, buffer, strlen(buffer));
+	(void)write(sd, buffer, strlen(buffer));
 }
 
 void workshop_move_mark(char *filename, int markId, int newLineno)
@@ -1106,7 +1106,7 @@
 	char buffer[2*MAXPATHLEN];
 	vim_snprintf(buffer, sizeof(buffer),
 	       NOCATGETS("moveMark %s %d %d\n"), filename, markId, newLineno);
-	write(sd, buffer, strlen(buffer));
+	(void)write(sd, buffer, strlen(buffer));
 }
 #endif
 
@@ -1119,7 +1119,7 @@
 		vim_snprintf(buffer, sizeof(buffer),
 				NOCATGETS("frameAt %d %d %d %d\n"),
 				new_x, new_y, new_w, new_h);
-		write(sd, buffer, strlen(buffer));
+		(void)write(sd, buffer, strlen(buffer));
 	}
 }
 
@@ -1179,7 +1179,7 @@
 			selEndLine, selEndCol,
 			selLength,
 			selection);
-		write(sd, buf, strlen(buf));
+		(void)write(sd, buf, strlen(buf));
 		if (*selection) {
 			free(selection);
 		}
@@ -1190,7 +1190,7 @@
 #if defined(NOHANDS_SUPPORT_FUNCTIONS) || defined(FEAT_BEVAL)
 void workshop_send_message(char *buf)
 {
-	write(sd, buf, strlen(buf));
+	(void)write(sd, buf, strlen(buf));
 }
 #endif
 
