lib: add safe_setsockopt/send/sendto functions
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
diff --git a/lib/safe_net.c b/lib/safe_net.c
index 2c929ad..e48b06d 100644
--- a/lib/safe_net.c
+++ b/lib/safe_net.c
@@ -97,6 +97,58 @@
return rval;
}
+int safe_setsockopt(const char *file, const int lineno, int sockfd, int level,
+ int optname, const void *optval, socklen_t optlen)
+{
+ int rval;
+
+ rval = setsockopt(sockfd, level, optname, optval, optlen);
+
+ if (rval) {
+ tst_brkm(TBROK | TERRNO, NULL,
+ "%s:%d: setsockopt(%d, %d, %d, %p, %d) failed",
+ file, lineno, sockfd, level, optname, optval, optlen);
+ }
+
+ return rval;
+}
+
+ssize_t safe_send(const char *file, const int lineno, char len_strict,
+ int sockfd, const void *buf, size_t len, int flags)
+{
+ ssize_t rval;
+
+ rval = send(sockfd, buf, len, flags);
+
+ if (rval == -1 || (len_strict && (size_t)rval != len)) {
+ tst_brkm(TBROK | TERRNO, NULL,
+ "%s:%d: send(%d, %p, %zu, %d) failed",
+ file, lineno, sockfd, buf, len, flags);
+ }
+
+ return rval;
+}
+
+ssize_t safe_sendto(const char *file, const int lineno, char len_strict,
+ int sockfd, const void *buf, size_t len, int flags,
+ const struct sockaddr *dest_addr, socklen_t addrlen)
+{
+ ssize_t rval;
+ char res[128];
+
+ rval = sendto(sockfd, buf, len, flags, dest_addr, addrlen);
+
+ if (rval == -1 || (len_strict && (size_t)rval != len)) {
+ tst_brkm(TBROK | TERRNO, NULL,
+ "%s:%d: sendto(%d, %p, %zu, %d, %s, %d) failed",
+ file, lineno, sockfd, buf, len, flags,
+ tst_sock_addr(dest_addr, addrlen, res, sizeof(res)),
+ addrlen);
+ }
+
+ return rval;
+}
+
int safe_bind(const char *file, const int lineno, void (cleanup_fn)(void),
int socket, const struct sockaddr *address,
socklen_t address_len)