aboutsummaryrefslogtreecommitdiffstats
path: root/src/assuan-socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/assuan-socket.c')
-rw-r--r--src/assuan-socket.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/assuan-socket.c b/src/assuan-socket.c
index 2b148d1..4c859a5 100644
--- a/src/assuan-socket.c
+++ b/src/assuan-socket.c
@@ -289,7 +289,7 @@ MyDeleteFile (LPCSTR lpFileName)
int
-_assuan_sock_wsa2errno (int err)
+_assuan_sock_wsa2errno (assuan_context_t ctx, int err)
{
switch (err)
{
@@ -306,6 +306,8 @@ _assuan_sock_wsa2errno (int err)
default:
return EIO;
}
+
+ ctx->w32_error = err;
}
@@ -674,6 +676,10 @@ _assuan_sock_get_flag (assuan_context_t ctx, assuan_fd_t sockfd,
}
*r_value = !!i;
}
+#ifdef HAVE_W32_SYSTEM
+ else if (!strcmp (name, "w32_error"))
+ *r_value = ctx->w32_error;
+#endif
else
{
gpg_err_set_errno (EINVAL);
@@ -1076,7 +1082,7 @@ _assuan_sock_accept (assuan_context_t ctx, assuan_fd_t sockfd,
#ifdef HAVE_W32_SYSTEM
res = SOCKET2HANDLE (accept (HANDLE2SOCKET (sockfd), addr, p_addrlen));
if (res == SOCKET2HANDLE (INVALID_SOCKET))
- gpg_err_set_errno (_assuan_sock_wsa2errno (WSAGetLastError ()));
+ gpg_err_set_errno (_assuan_sock_wsa2errno (ctx, WSAGetLastError ()));
#else
res = accept (sockfd, addr, p_addrlen);
#endif
@@ -1312,7 +1318,7 @@ _assuan_sock_bind (assuan_context_t ctx, assuan_fd_t sockfd,
(struct sockaddr *)&myaddr, &len);
if (rc)
{
- int save_e = _assuan_sock_wsa2errno (WSAGetLastError ());
+ int save_e = _assuan_sock_wsa2errno (ctx, WSAGetLastError ());
CloseHandle (filehd);
MyDeleteFile (unaddr->sun_path);
gpg_err_set_errno (save_e);
@@ -1351,7 +1357,7 @@ _assuan_sock_bind (assuan_context_t ctx, assuan_fd_t sockfd,
{
res = bind (HANDLE2SOCKET(sockfd), addr, addrlen);
if (res < 0)
- gpg_err_set_errno ( _assuan_sock_wsa2errno (WSAGetLastError ()));
+ gpg_err_set_errno ( _assuan_sock_wsa2errno (ctx, WSAGetLastError ()));
}
leave:
#else