#include <afsconfig.h>
#include <afs/param.h>
+#include <roken.h>
+
+#include <afs/opr.h>
-# include <sys/types.h>
-# include <errno.h>
-# include <signal.h>
-# include <string.h>
#ifdef AFS_NT40_ENV
# include <WINNT/syscfg.h>
#else
-# include <sys/socket.h>
-# include <sys/file.h>
-# include <netdb.h>
-# include <sys/stat.h>
-# include <netinet/in.h>
-# include <sys/time.h>
# include <net/if.h>
-# include <sys/ioctl.h>
-# include <unistd.h>
#endif
-# include <fcntl.h>
#if !defined(AFS_AIX_ENV) && !defined(AFS_NT40_ENV)
# include <sys/syscall.h>
#endif
#endif
#endif
-#ifndef AFS_NT40_ENV
-# include <sys/time.h>
-#endif
-# include "rx.h"
-# include "rx_globals.h"
-
+#include "rx.h"
+#include "rx_atomic.h"
+#include "rx_globals.h"
+#include "rx_stats.h"
#ifdef AFS_PTHREAD_ENV
-#include <assert.h>
/*
* The rx_if_init_mutex mutex protects the following global variables:
goto error;
}
#endif
- socketFd = socket(AF_INET, SOCK_DGRAM, 0);
+ socketFd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (socketFd < 0) {
+ if (socketFd == OSI_NULLSOCKET) {
+#ifdef AFS_NT40_ENV
+ fprintf(stderr, "socket() failed with error %u\n", WSAGetLastError());
+#else
perror("socket");
+#endif
goto error;
}
if (binds)
rxi_Delay(10);
code = bind(socketFd, (struct sockaddr *)&taddr, sizeof(taddr));
- if (!code)
- break;
+ break;
}
if (code) {
- perror("bind");
(osi_Msg "%sbind failed\n", name);
goto error;
}
if (!greedy)
(osi_Msg "%s*WARNING* Unable to increase buffering on socket\n",
name);
- if (rx_stats_active) {
- MUTEX_ENTER(&rx_stats_mutex);
- rx_stats.socketGreedy = greedy;
- MUTEX_EXIT(&rx_stats_mutex);
- }
+ if (rx_stats_active)
+ rx_atomic_set(&rx_stats.socketGreedy, greedy);
}
#ifdef AFS_LINUX22_ENV
error:
#ifdef AFS_NT40_ENV
- if (socketFd >= 0)
+ if (socketFd != OSI_NULLSOCKET)
closesocket(socketFd);
#else
- if (socketFd >= 0)
+ if (socketFd != OSI_NULLSOCKET)
close(socketFd);
#endif
va_end(ap);
fflush(stderr);
fflush(stdout);
- afs_abort();
+ opr_abort();
}
/*
memset(myNetMTUs, 0, sizeof(myNetMTUs));
memset(myNetMasks, 0, sizeof(myNetMasks));
UNLOCK_IF;
- s = socket(AF_INET, SOCK_DGRAM, 0);
- if (s < 0)
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ if (s == OSI_NULLSOCKET)
return;
-
#ifdef AFS_AIX41_ENV
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
struct sockaddr_in addr;
#endif
-
-
LOCK_IF_INIT;
if (!Inited) {
UNLOCK_IF_INIT;
ppaddr = ntohl(pp->host);
pp->ifMTU = 0;
- pp->timeout.sec = 2;
- pp->rateFlag = 2; /* start timing after two full packets */
+ rx_rto_setPeerTimeoutSecs(pp, 2);
/* I don't initialize these, because I presume they are bzero'd...
* pp->burstSize pp->burst pp->burstWait.sec pp->burstWait.usec
- * pp->timeout.usec */
+ */
LOCK_IF;
for (ix = 0; ix < rxi_numNetAddrs; ++ix) {
if ((rxi_NetAddrs[ix] & myNetMasks[ix]) == (ppaddr & myNetMasks[ix])) {
#ifdef IFF_POINTOPOINT
if (myNetFlags[ix] & IFF_POINTOPOINT)
- pp->timeout.sec = 4;
+ rx_rto_setPeerTimeoutSecs(pp, 4);
#endif /* IFF_POINTOPOINT */
+
rxmtu = myNetMTUs[ix] - RX_IPUDP_SIZE;
if (rxmtu < RX_MIN_PACKET_SIZE)
rxmtu = RX_MIN_PACKET_SIZE;
}
UNLOCK_IF;
if (!pp->ifMTU) { /* not local */
- pp->timeout.sec = 3;
+ rx_rto_setPeerTimeoutSecs(pp, 3);
pp->ifMTU = MIN(rx_MyMaxSendSize, RX_REMOTE_PACKET_SIZE);
}
#else /* ADAPT_MTU */
- pp->rateFlag = 2; /* start timing after two full packets */
- pp->timeout.sec = 2;
+ rx_rto_setPeerTimeoutSecs(pp, 2);
pp->ifMTU = MIN(rx_MyMaxSendSize, OLD_MAX_PACKET_SIZE);
#endif /* ADAPT_MTU */
#if defined(ADAPT_PMTU) && defined(IP_MTU)
sock=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (sock >= 0) {
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = pp->host;
- addr.sin_port = pp->port;
- if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0) {
- int mtu=0;
- socklen_t s = sizeof(mtu);
- if (getsockopt(sock, SOL_IP, IP_MTU, &mtu, &s)== 0) {
- pp->ifMTU = MIN(mtu - RX_IPUDP_SIZE, pp->ifMTU);
- }
- }
- close(sock);
+ if (sock != OSI_NULLSOCKET) {
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = pp->host;
+ addr.sin_port = pp->port;
+ if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0) {
+ int mtu=0;
+ socklen_t s = sizeof(mtu);
+ if (getsockopt(sock, SOL_IP, IP_MTU, &mtu, &s)== 0) {
+ pp->ifMTU = MIN(mtu - RX_IPUDP_SIZE, pp->ifMTU);
+ }
+ }
+#ifdef AFS_NT40_ENV
+ closesocket(sock);
+#else
+ close(sock);
+#endif
}
#endif
pp->ifMTU = rxi_AdjustIfMTU(pp->ifMTU);