Handle EINTR more in handshaker.cc.
Some of our calls handled it and others didn't.
Change-Id: I09f15d3db679954599bcf987d86357b6e12e9b9b
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/46532
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/ssl/test/handshaker.cc b/ssl/test/handshaker.cc
index 74e39f3..8129091 100644
--- a/ssl/test/handshaker.cc
+++ b/ssl/test/handshaker.cc
@@ -29,6 +29,22 @@
namespace {
+ssize_t read_eintr(int fd, void *out, size_t len) {
+ ssize_t ret;
+ do {
+ ret = read(fd, out, len);
+ } while (ret < 0 && errno == EINTR);
+ return ret;
+}
+
+ssize_t write_eintr(int fd, const void *in, size_t len) {
+ ssize_t ret;
+ do {
+ ret = write(fd, in, len);
+ } while (ret < 0 && errno == EINTR);
+ return ret;
+}
+
bool HandbackReady(SSL *ssl, int ret) {
return ret < 0 && SSL_get_error(ssl, ret) == SSL_ERROR_HANDBACK;
}
@@ -71,8 +87,8 @@
// Synchronize with the proxy, i.e. don't let the handshake continue until
// the proxy has sent more data.
char msg = kControlMsgWantRead;
- if (write(control, &msg, 1) != 1 ||
- read(control, &msg, 1) != 1 ||
+ if (write_eintr(control, &msg, 1) != 1 ||
+ read_eintr(control, &msg, 1) != 1 ||
msg != kControlMsgWriteCompleted) {
fprintf(stderr, "read via proxy failed\n");
return false;
@@ -100,30 +116,15 @@
}
char msg = kControlMsgHandback;
- if (write(control, &msg, 1) == -1 ||
- write(control, CBB_data(output.get()), CBB_len(output.get())) == -1) {
+ if (write_eintr(control, &msg, 1) == -1 ||
+ write_eintr(control, CBB_data(output.get()), CBB_len(output.get())) ==
+ -1) {
perror("write");
return false;
}
return true;
}
-ssize_t read_eintr(int fd, void *out, size_t len) {
- ssize_t ret;
- do {
- ret = read(fd, out, len);
- } while (ret < 0 && errno == EINTR);
- return ret;
-}
-
-ssize_t write_eintr(int fd, const void *in, size_t len) {
- ssize_t ret;
- do {
- ret = write(fd, in, len);
- } while (ret < 0 && errno == EINTR);
- return ret;
-}
-
int SignalError() {
const char msg = kControlMsgError;
if (write_eintr(kFdControl, &msg, 1) != 1) {