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,
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
clock_Init(void)
{
if (!QueryPerformanceFrequency(&rxi_clockFreq)) {
- printf("No High Performance clock, exiting.\n");
+ OutputDebugString("No High Performance clock, exiting.\n");
exit(1);
}
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;
}
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--;
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;
}
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;
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;
}
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;
}
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 */
if (!msg)
msg = "Unknown AFS panic";
- printf(msg, a1, a2, a3);
+ dpf(msg, a1, a2, a3));
#ifdef AFS_LINUX24_ENV
BUG();
#else
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;
}
rxk_shutdownPorts();
return;
}
- printf("shutdown_rxkernel: no udp proto");
+ dpf(("shutdown_rxkernel: no udp proto"));
}
#endif /* !AIX && !SUN && !NCR && !UKERNEL */
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;
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);
int length, int istack)
{
struct msghdr msg;
+ int ret;
memset(&msg, 0, sizeof(msg));
msg.msg_iov = dvec;
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)
/*
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
{
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;
}
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);
}
*/
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();
} 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);
}
}
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);
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);
#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;
}
case WSAEWOULDBLOCK:
errno = WSAEWOULDBLOCK;
break;
+ case WSAEHOSTUNREACH:
+ errno = WSAEHOSTUNREACH;
+ break;
default:
errno = EIO;
break;
}
code = -1;
- }
+ } else
#endif /* AFS_NT40_ENV */
if (code < size) {