X-Git-Url: http://www.average.org/gitweb/?p=psmb.git;a=blobdiff_plain;f=src%2Fpsmb_socket.c;fp=src%2Fpsmb_socket.c;h=660a563c375ac8ab5ffcc439ab2b631b09088b6d;hp=a7c42efa9a6177443264731eff064ad6fe9bfcc4;hb=b59ce6ecc3287f39125703670720c8323235c8ac;hpb=0f3d787b19881c5d489ba476d1e5895df4f77084 diff --git a/src/psmb_socket.c b/src/psmb_socket.c index a7c42ef..660a563 100644 --- a/src/psmb_socket.c +++ b/src/psmb_socket.c @@ -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};