listener: Preserve last error in evconnlistener_new_bind() before close

In function evconnlistener_new_bind() after go to "err:", The
evutil_closesocket() would clear the error code( I found this under
Windows ). User can not use EVUTIL_SOCKET_ERROR() to get the
evconnlistener_new_bind()'s failing error.

I add a err_code variable to store and restore the last error code.

v2: rebased by azat to make the patch simpler
This commit is contained in:
kenping 2022-04-21 15:59:28 +08:00 committed by Azat Khuzhin
parent 7aeecb60c4
commit d96457e132

View File

@ -275,8 +275,13 @@ evconnlistener_new_bind(struct event_base *base, evconnlistener_cb cb,
return listener;
err:
evutil_closesocket(fd);
return NULL;
{
int saved_errno = EVUTIL_SOCKET_ERROR();
evutil_closesocket(fd);
if (saved_errno)
EVUTIL_SET_SOCKET_ERROR(saved_errno);
return NULL;
}
}
void