return -2;
}
SILC_LOG_DEBUG(("Cannot write to socket: %s", strerror(errno)));
+ sock->sock_error = errno;
return -1;
}
+ if (ret < src->len) {
+ SILC_LOG_DEBUG(("Wrote data %d of %d bytes, will write rest later",
+ ret, src->len));
+ silc_buffer_pull(src, ret);
+ return -2;
+ }
+
silc_buffer_pull(src, ret);
}
return -2;
}
SILC_LOG_DEBUG(("Cannot read from socket: %d:%s", fd, strerror(errno)));
+ sock->sock_error = errno;
return -1;
}
return len;
}
+
+/* Returns human readable socket error message */
+
+bool silc_socket_get_error(SilcSocketConnection sock, char *error,
+ SilcUInt32 error_len)
+{
+ char *err;
+
+ if (!sock->sock_error)
+ return FALSE;
+
+ err = strerror(sock->sock_error);
+ if (strlen(err) > error_len)
+ return FALSE;
+
+ memset(error, 0, error_len);
+ memcpy(error, err, strlen(err));
+ return TRUE;
+}