]> www.average.org Git - psmb.git/blobdiff - src/psmb_socket.c
save errnos
[psmb.git] / src / psmb_socket.c
index a7c42efa9a6177443264731eff064ad6fe9bfcc4..660a563c375ac8ab5ffcc439ab2b631b09088b6d 100644 (file)
@@ -68,20 +68,26 @@ psmb_result_t psmb_open(psmb_ctx_t *ctx)
        }
        if (setsockopt(ctx->fd, SOL_SOCKET, SO_REUSEADDR,
                        &on, sizeof(on)) < 0) {
+               int sverr = errno;
                close(ctx->fd);
                ctx->fd = -1;
+               errno = sverr;
                return (psmb_result_t){PSMB_ERROR};
        }
        if (setsockopt(ctx->fd, IPPROTO_IPV6, IPV6_PKTINFO,
                        &on, sizeof(on)) < 0) {
+               int sverr = errno;
                close(ctx->fd);
                ctx->fd = -1;
+               errno = sverr;
                return (psmb_result_t){PSMB_ERROR};
        }
        if (bind(ctx->fd, (struct sockaddr *)&addr,
                        sizeof(struct sockaddr)) == -1) {
+               int sverr = errno;
                close(ctx->fd);
                ctx->fd = -1;
+               errno = sverr;
                return (psmb_result_t){PSMB_ERROR};
        }
        return (psmb_result_t){PSMB_OK};