taddr.sin_addr.s_addr = ahost;
taddr.sin_family = AF_INET;
taddr.sin_port = (u_short) port;
+ memset(&taddr.sin_zero, 0, sizeof(taddr.sin_zero));
#ifdef STRUCT_SOCKADDR_HAS_SA_LEN
taddr.sin_len = sizeof(struct sockaddr_in);
#endif
#endif
#ifdef AFS_NT40_ENV
-extern int rxinit_status;
void
rxi_InitMorePackets(void) {
int npackets, ncbufs;
LOCK_IF_INIT;
if (Inited) {
- if (Inited < 2 && rxinit_status == 0) {
+ if (Inited < 2 && rxi_IsRunning()) {
/* We couldn't initialize more packets earlier.
* Do it now. */
rxi_InitMorePackets();
UNLOCK_IF;
/*
- * If rxinit_status is still set, rx_InitHost() has yet to be called
+ * If rxi_IsRunning is false, rx_InitHost() has yet to be called
* and we therefore do not have any mutex locks initialized. As a
* result we cannot call rxi_MorePackets() without crashing.
*/
- if (rxinit_status)
+ if (!rxi_IsRunning())
return;
rxi_InitMorePackets();
-#if !defined(AFS_AIX_ENV) && !defined(AFS_NT40_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_AIX_ENV) && !defined(AFS_NT40_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN160_ENV)
int
rxi_syscall(afs_uint32 a3, afs_uint32 a4, void *a5)
{
#if defined(AFS_SGI_ENV)
rcode = afs_syscall(AFS_SYSCALL, 28, a3, a4, a5);
-#else
+#elif defined(AFS_SYSCALL)
rcode = syscall(AFS_SYSCALL, 28 /* AFSCALL_CALL */ , a3, a4, a5);
+#else
+ rcode = -1;
#endif /* AFS_SGI_ENV */
signal(SIGSYS, old);
}
#endif /* SIOCGIFFLAGS */
-#if !defined(AFS_AIX_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_AIX_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN160_ENV)
/* this won't run on an AIX system w/o a cache manager */
rxi_syscallp = rxi_syscall;
#endif
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = pp->host;
addr.sin_port = pp->port;
+ memset(&addr.sin_zero, 0, sizeof(addr.sin_zero));
if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0) {
int mtu=0;
socklen_t s = sizeof(mtu);
#ifdef AFS_RXERRQ_ENV
int
-rxi_HandleSocketError(int socket)
+osi_HandleSocketError(int socket, void *cmsgbuf, size_t cmsgbuf_len)
{
- int ret = 0;
struct msghdr msg;
struct cmsghdr *cmsg;
struct sock_extended_err *err;
struct sockaddr_in addr;
- char controlmsgbuf[256];
int code;
msg.msg_name = &addr;
msg.msg_namelen = sizeof(addr);
msg.msg_iov = NULL;
msg.msg_iovlen = 0;
- msg.msg_control = controlmsgbuf;
- msg.msg_controllen = 256;
+ msg.msg_control = cmsgbuf;
+ msg.msg_controllen = cmsgbuf_len;
msg.msg_flags = 0;
code = recvmsg(socket, &msg, MSG_ERRQUEUE|MSG_DONTWAIT|MSG_TRUNC);
if (code < 0 || !(msg.msg_flags & MSG_ERRQUEUE))
- goto out;
+ return 0;
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
- if ((char *)cmsg - controlmsgbuf > msg.msg_controllen - CMSG_SPACE(0) ||
- (char *)cmsg - controlmsgbuf > msg.msg_controllen - CMSG_SPACE(cmsg->cmsg_len) ||
- cmsg->cmsg_len == 0) {
- cmsg = 0;
- break;
+ if (cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_RECVERR) {
+ err = (struct sock_extended_err *)CMSG_DATA(cmsg);
+ rxi_ProcessNetError(err, addr.sin_addr.s_addr, addr.sin_port);
}
- if (cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_RECVERR)
- break;
}
- if (!cmsg)
- goto out;
- ret = 1;
- err = (struct sock_extended_err *) CMSG_DATA(cmsg);
-
- rxi_ProcessNetError(err, addr.sin_addr.s_addr, addr.sin_port);
-out:
- return ret;
+ return 1;
}
#endif