2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-02 23:55:27 +00:00

make the same change to win32/socket.c here as was made on v9_5 to fix connected UDP sockets

This commit is contained in:
Michael Graff
2008-09-16 17:19:01 +00:00
parent 896f88361e
commit 467e6fd167
2 changed files with 35 additions and 66 deletions

View File

@@ -1,3 +1,8 @@
2443. [bug] win32: UDP connect() would not generate an event,
and so connected UDP sockets would never clean up.
Fix this by doing an immediate WSAConnect() rather
than an io completion port type for UDP.
2442. [bug] A lock could be destroyed twice. [RT# 18626]
2441. [bug] isc_radix_insert() could copy radix tree nodes

View File

@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: socket.c,v 1.69 2008/09/12 04:46:25 marka Exp $ */
/* $Id: socket.c,v 1.70 2008/09/16 17:19:01 explorer Exp $ */
/* This code uses functions which are only available on Server 2003 and
* higher, and Windows XP and higher.
@@ -86,14 +86,6 @@ LPFN_CONNECTEX ISCConnectEx;
LPFN_ACCEPTEX ISCAcceptEx;
LPFN_GETACCEPTEXSOCKADDRS ISCGetAcceptExSockaddrs;
/*
* 0 = no debugging, 1 = write to file "socket.log" in working directory.
*/
#define XXXMLG_DEBUG 0
#if XXXMLG_DEBUG
FILE *logfile = NULL;
#endif
/*
* Run expensive internal consistancy checks.
*/
@@ -823,20 +815,10 @@ socket_log(int lineno, isc_socket_t *sock, isc_sockaddr_t *address,
char msgbuf[2048];
char peerbuf[256];
va_list ap;
#if XXXMLG_DEBUG
char timebuf[128];
isc_time_t now;
#endif
#if XXXMLG_DEBUG
isc_time_now(&now);
isc_time_formattimestamp(&now, timebuf, sizeof timebuf);
#endif
#if XXXMLG_DEBUG == 0
if (!isc_log_wouldlog(isc_lctx, level))
return;
#endif
va_start(ap, fmt);
vsnprintf(msgbuf, sizeof(msgbuf), fmt, ap);
@@ -846,28 +828,14 @@ socket_log(int lineno, isc_socket_t *sock, isc_sockaddr_t *address,
isc_log_iwrite(isc_lctx, category, module, level,
msgcat, msgset, message,
"socket %p line %d: %s", sock, lineno, msgbuf);
#if XXXMLG_DEBUG
if (logfile)
fprintf(logfile, "%s socket %p line %d: %s:\n",
timebuf, sock, lineno, msgbuf);
#endif
} else {
isc_sockaddr_format(address, peerbuf, sizeof(peerbuf));
isc_log_iwrite(isc_lctx, category, module, level,
msgcat, msgset, message,
"socket %p line %d peer %s: %s", sock, lineno,
peerbuf, msgbuf);
#if XXXMLG_DEBUG
if (logfile)
fprintf(logfile, "%s socket %p line %d: %s: %s\n",
timebuf, sock, lineno, peerbuf, msgbuf);
#endif
}
#if XXXMLG_DEBUG
if (logfile)
fflush(logfile);
#endif
}
/*
@@ -2479,10 +2447,6 @@ isc_socketmgr_create2(isc_mem_t *mctx, isc_socketmgr_t **managerp,
if (maxsocks != 0)
return (ISC_R_NOTIMPLEMENTED);
#if XXXMLG_DEBUG
logfile = fopen("socket.log", "w");
#endif
manager = isc_mem_get(mctx, sizeof(*manager));
if (manager == NULL)
return (ISC_R_NOMEMORY);
@@ -2534,11 +2498,6 @@ isc_socketmgr_destroy(isc_socketmgr_t **managerp) {
int i;
isc_mem_t *mctx;
#if XXXMLG_DEBUG
if (logfile)
fclose(logfile);
#endif
/*
* Destroy a socket manager.
*/
@@ -3345,6 +3304,7 @@ isc_socket_connect(isc_socket_t *sock, isc_sockaddr_t *addr,
}
ISC_LINK_INIT(cdev, ev_link);
if (sock->type == isc_sockettype_tcp) {
/*
* Queue io completion for an accept().
*/
@@ -3372,7 +3332,11 @@ isc_socket_connect(isc_socket_t *sock, isc_sockaddr_t *addr,
*/
sock->connect_ev = cdev;
sock->pending_iocp++;
} else {
WSAConnect(sock->fd, &addr->type.sa, addr->length, NULL, NULL, NULL, NULL);
cdev->result = ISC_R_SUCCESS;
isc_task_send(task, (isc_event_t **)&cdev);
}
CONSISTENT(sock);
UNLOCK(&sock->lock);