diff --git a/src/rx/rx.c b/src/rx/rx.c index 7b44ff62ed..d24ee60c59 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -6033,6 +6033,21 @@ rxi_DebugPrint(char *format, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15) { +#ifdef AFS_NT40_ENV + char msg[512]; + int len; + + len = _snprintf(msg, sizeof(msg)-2, + format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15); + if (len > 0) { + if (msg[len-1] != '\n') { + msg[len] = '\n'; + msg[len+1] = '\0'; + } + OutputDebugString(msg); + } +#else struct clock now; clock_GetTime(&now); fprintf(rx_Log, " %u.%.3u:", (unsigned int)now.sec, @@ -6040,10 +6055,9 @@ rxi_DebugPrint(char *format, int a1, int a2, int a3, int a4, int a5, int a6, fprintf(rx_Log, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); putc('\n', rx_Log); -} #endif +} -#ifdef RXDEBUG /* * This function is used to process the rx_stats structure that is local * to a process as well as an rx_stats structure received from a remote diff --git a/src/rx/rx_clock_nt.c b/src/rx/rx_clock_nt.c index a449a4e83d..cab18d4352 100644 --- a/src/rx/rx_clock_nt.c +++ b/src/rx/rx_clock_nt.c @@ -47,7 +47,7 @@ void clock_Init(void) { if (!QueryPerformanceFrequency(&rxi_clockFreq)) { - printf("No High Performance clock, exiting.\n"); + OutputDebugString("No High Performance clock, exiting.\n"); exit(1); } diff --git a/src/rx/rx_getaddr.c b/src/rx/rx_getaddr.c index ac30057cff..bf67a62a9e 100644 --- a/src/rx/rx_getaddr.c +++ b/src/rx/rx_getaddr.c @@ -169,7 +169,7 @@ rx_getAllAddr(afs_int32 buffer[], int maxSize) while (next < lim) { ifm = (struct if_msghdr *)next; if (ifm->ifm_type != RTM_IFINFO) { - printf("out of sync parsing NET_RT_IFLIST\n"); + dpf(("out of sync parsing NET_RT_IFLIST\n")); free(buf); return 0; } @@ -204,8 +204,8 @@ rx_getAllAddr(afs_int32 buffer[], int maxSize) a = info.rti_info[RTAX_IFA]; if (count >= maxSize) /* no more space */ - printf("Too many interfaces..ignoring 0x%x\n", - a->sin_addr.s_addr); + dpf(("Too many interfaces..ignoring 0x%x\n", + a->sin_addr.s_addr)); else buffer[count++] = a->sin_addr.s_addr; addrcount--; @@ -253,7 +253,7 @@ rxi_getAllAddrMaskMtu(afs_int32 addrBuffer[], afs_int32 maskBuffer[], while (next < lim) { ifm = (struct if_msghdr *)next; if (ifm->ifm_type != RTM_IFINFO) { - printf("out of sync parsing NET_RT_IFLIST\n"); + dpf(("out of sync parsing NET_RT_IFLIST\n")); free(buf); return 0; } @@ -286,8 +286,8 @@ rxi_getAllAddrMaskMtu(afs_int32 addrBuffer[], afs_int32 maskBuffer[], if (a->sin_addr.s_addr != htonl(0x7f000001) ) { if (count >= maxSize) { /* no more space */ - printf("Too many interfaces..ignoring 0x%x\n", - a->sin_addr.s_addr); + dpf(("Too many interfaces..ignoring 0x%x\n", + a->sin_addr.s_addr)); } else { struct ifreq ifr; @@ -381,8 +381,8 @@ rx_getAllAddr_internal(afs_int32 buffer[], int maxSize, int loopbacks) continue; /* skip aliased loopbacks as well. */ } if (count >= maxSize) /* no more space */ - printf("Too many interfaces..ignoring 0x%x\n", - a->sin_addr.s_addr); + dpf(("Too many interfaces..ignoring 0x%x\n", + a->sin_addr.s_addr)); else buffer[count++] = a->sin_addr.s_addr; } @@ -462,8 +462,8 @@ rxi_getAllAddrMaskMtu(afs_int32 addrBuffer[], afs_int32 maskBuffer[], continue; /* skip loopback address as well. */ if (count >= maxSize) { /* no more space */ - printf("Too many interfaces..ignoring 0x%x\n", - a->sin_addr.s_addr); + dpf("Too many interfaces..ignoring 0x%x\n", + a->sin_addr.s_addr)); continue; } diff --git a/src/rx/rx_globals.h b/src/rx/rx_globals.h index a2a11729a6..90fd15e732 100644 --- a/src/rx/rx_globals.h +++ b/src/rx/rx_globals.h @@ -507,7 +507,11 @@ EXT FILE *rx_debugFile; /* Set by the user to a stdio file for debugging output EXT FILE *rxevent_debugFile; /* Set to an stdio descriptor for event logging to that file */ #define rx_Log rx_debugFile +#ifdef AFS_NT40_ENV +#define dpf(args) rxi_DebugPrint args; +#else #define dpf(args) if (rx_debugFile) rxi_DebugPrint args; else +#endif #define rx_Log_event rxevent_debugFile EXT char *rx_packetTypes[RX_N_PACKET_TYPES] INIT(RX_PACKET_TYPES); /* Strings defined in rx.h */ diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index b469bac683..9120442d2c 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -126,7 +126,7 @@ osi_Panic(msg, a1, a2, a3) if (!msg) msg = "Unknown AFS panic"; - printf(msg, a1, a2, a3); + dpf(msg, a1, a2, a3)); #ifdef AFS_LINUX24_ENV BUG(); #else @@ -316,7 +316,7 @@ MyPacketProc(char **ahandle, int asize) rx_stats.bogusPacketOnRead++; MUTEX_EXIT(&rx_stats_mutex); /* I DON"T LIKE THIS PRINTF -- PRINTFS MAKE THINGS VERY VERY SLOOWWW */ - printf("rx: packet dropped: bad ulen=%d\n", asize); + dpf(("rx: packet dropped: bad ulen=%d\n", asize)); tp = NULL; } @@ -495,7 +495,7 @@ shutdown_rxkernel(void) rxk_shutdownPorts(); return; } - printf("shutdown_rxkernel: no udp proto"); + dpf(("shutdown_rxkernel: no udp proto")); } #endif /* !AIX && !SUN && !NCR && !UKERNEL */ @@ -864,7 +864,7 @@ rxk_NewSocketHost(afs_uint32 ahost, short aport) code = sobind(newSocket, (struct sockaddr *)&myaddr); #endif if (code) { - printf("sobind fails (%d)\n", (int)code); + dpf(("sobind fails (%d)\n", (int)code)); soclose(newSocket); AFS_GLOCK(); goto bad; @@ -891,7 +891,7 @@ rxk_NewSocketHost(afs_uint32 ahost, short aport) code = sobind(newSocket, nam); #endif if (code) { - printf("sobind fails (%d)\n", (int)code); + dpf(("sobind fails (%d)\n", (int)code)); soclose(newSocket); #ifndef AFS_SGI65_ENV m_freem(nam); diff --git a/src/rx/rx_packet.c b/src/rx/rx_packet.c index 84a55c76c9..f0a8fe9b1a 100644 --- a/src/rx/rx_packet.c +++ b/src/rx/rx_packet.c @@ -1472,6 +1472,7 @@ osi_NetSend(osi_socket socket, void *addr, struct iovec *dvec, int nvecs, int length, int istack) { struct msghdr msg; + int ret; memset(&msg, 0, sizeof(msg)); msg.msg_iov = dvec; @@ -1479,9 +1480,9 @@ osi_NetSend(osi_socket socket, void *addr, struct iovec *dvec, int nvecs, msg.msg_name = addr; msg.msg_namelen = sizeof(struct sockaddr_in); - rxi_Sendmsg(socket, &msg, 0); + ret = rxi_Sendmsg(socket, &msg, 0); - return 0; + return ret; } #elif !defined(UKERNEL) /* @@ -2134,6 +2135,15 @@ rxi_SendPacket(struct rx_call *call, struct rx_connection *conn, clock_Addmsec(&(p->retryTime), 10 + (((afs_uint32) p->backoff) << 8)); +#ifdef AFS_NT40_ENV + /* Windows is nice -- it can tell us right away that we cannot + * reach this recipient by returning an WSAEHOSTUNREACH error + * code. So, when this happens let's "down" the host NOW so + * we don't sit around waiting for this host to timeout later. + */ + if (call && code == -1 && errno == WSAEHOSTUNREACH) + call->lastReceiveTime = 0; +#endif #if defined(KERNEL) && defined(AFS_LINUX20_ENV) /* Linux is nice -- it can tell us right away that we cannot * reach this recipient by returning an ENETUNREACH error diff --git a/src/rx/rx_pthread.c b/src/rx/rx_pthread.c index c0e4329ef0..d67a691978 100644 --- a/src/rx/rx_pthread.c +++ b/src/rx/rx_pthread.c @@ -96,7 +96,7 @@ server_entry(void *argp) { void (*server_proc) () = (void (*)())argp; server_proc(); - printf("rx_pthread.c: server_entry: Server proc returned unexpectedly\n"); + dpf(("rx_pthread.c: server_entry: Server proc returned unexpectedly\n")); exit(1); return (void *)0; } @@ -112,13 +112,13 @@ rxi_StartServerProc(void (*proc) (void), int stacksize) AFS_SIGSET_DECL; if (pthread_attr_init(&tattr) != 0) { - printf("Unable to Create Rx server thread (pthread_attr_init)\n"); + dpf(("Unable to Create Rx server thread (pthread_attr_init)\n")); exit(1); } if (pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED) != 0) { - printf - ("Unable to Create Rx server thread (pthread_attr_setdetachstate)\n"); + dpf + (("Unable to Create Rx server thread (pthread_attr_setdetachstate)\n")); exit(1); } @@ -127,7 +127,7 @@ rxi_StartServerProc(void (*proc) (void), int stacksize) */ AFS_SIGSET_CLEAR(); if (pthread_create(&thread, &tattr, server_entry, (void *)proc) != 0) { - printf("Unable to Create Rx server thread\n"); + dpf(("Unable to Create Rx server thread\n")); exit(1); } AFS_SIGSET_RESTORE(); @@ -220,7 +220,7 @@ rxi_ListenerProc(int sock, int *tnop, struct rx_call **newcallp) } else { if (!(p = rxi_AllocPacket(RX_PACKET_CLASS_RECEIVE))) { /* Could this happen with multiple socket listeners? */ - printf("rxi_Listener: no packets!"); /* Shouldn't happen */ + dpf(("rxi_Listener: no packets!")); /* Shouldn't happen */ exit(1); } } @@ -323,21 +323,21 @@ rxi_StartListener(void) AFS_SIGSET_DECL; if (pthread_attr_init(&tattr) != 0) { - printf - ("Unable to create Rx event handling thread (pthread_attr_init)\n"); + dpf + (("Unable to create Rx event handling thread (pthread_attr_init)\n")); exit(1); } if (pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED) != 0) { - printf - ("Unable to create Rx event handling thread (pthread_attr_setdetachstate)\n"); + dpf + (("Unable to create Rx event handling thread (pthread_attr_setdetachstate)\n")); exit(1); } AFS_SIGSET_CLEAR(); if (pthread_create(&event_handler_thread, &tattr, event_handler, NULL) != 0) { - printf("Unable to create Rx event handling thread\n"); + dpf(("Unable to create Rx event handling thread\n")); exit(1); } MUTEX_ENTER(&rx_stats_mutex); @@ -363,20 +363,20 @@ rxi_Listen(osi_socket sock) AFS_SIGSET_DECL; if (pthread_attr_init(&tattr) != 0) { - printf - ("Unable to create socket listener thread (pthread_attr_init)\n"); + dpf + (("Unable to create socket listener thread (pthread_attr_init)\n")); exit(1); } if (pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED) != 0) { - printf - ("Unable to create socket listener thread (pthread_attr_setdetachstate)\n"); + dpf + (("Unable to create socket listener thread (pthread_attr_setdetachstate)\n")); exit(1); } AFS_SIGSET_CLEAR(); if (pthread_create(&thread, &tattr, rx_ListenerProc, (void *)sock) != 0) { - printf("Unable to create socket listener thread\n"); + dpf(("Unable to create socket listener thread\n")); exit(1); } MUTEX_ENTER(&rx_stats_mutex); @@ -415,8 +415,9 @@ rxi_Sendmsg(osi_socket socket, struct msghdr *msg_p, int flags) #else if (ret == -1) { #endif - printf("rxi_sendmsg failed, error %d\n", errno); + dpf(("rxi_sendmsg failed, error %d\n", errno)); fflush(stdout); + return -1; } return 0; } diff --git a/src/rx/rx_xmit_nt.c b/src/rx/rx_xmit_nt.c index 8ce42e558f..4e8d7ef9a7 100644 --- a/src/rx/rx_xmit_nt.c +++ b/src/rx/rx_xmit_nt.c @@ -139,12 +139,15 @@ sendmsg(int socket, struct msghdr *msgP, int flags) case WSAEWOULDBLOCK: errno = WSAEWOULDBLOCK; break; + case WSAEHOSTUNREACH: + errno = WSAEHOSTUNREACH; + break; default: errno = EIO; break; } code = -1; - } + } else #endif /* AFS_NT40_ENV */ if (code < size) {