}
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};