Browse Source

Merge pull request #3453 from GoNZooo/gonz.add-nosignal-broken-pipe

fix(net/linux): add `NOSIGNAL` to `send` options
gingerBill 1 year ago
parent
commit
3620e62ff7
1 changed files with 6 additions and 2 deletions
  1. 6 2
      core/net/socket_linux.odin

+ 6 - 2
core/net/socket_linux.odin

@@ -258,8 +258,12 @@ _send_tcp :: proc(tcp_sock: TCP_Socket, buf: []byte) -> (int, Network_Error) {
 	for total_written < len(buf) {
 		limit := min(int(max(i32)), len(buf) - total_written)
 		remaining := buf[total_written:][:limit]
-		res, errno := linux.send(linux.Fd(tcp_sock), remaining, {})
-		if errno != .NONE {
+		res, errno := linux.send(linux.Fd(tcp_sock), remaining, {.NOSIGNAL})
+		if errno == .EPIPE {
+			// If the peer is disconnected when we are trying to send we will get an `EPIPE` error,
+			// so we turn that into a clearer error
+			return total_written, TCP_Send_Error.Connection_Closed
+		} else if errno != .NONE {
 			return total_written, TCP_Send_Error(errno)
 		}
 		total_written += int(res)