struct msghdr msg;
int code;
-#ifdef AFS_RXERRQ_ENV
- while (osi_HandleSocketError(sop))
- ;
-#endif
msg.msg_name = to;
msg.msg_namelen = sizeof(*to);
msg.msg_flags = 0;
code = kernel_sendmsg(sop, &msg, (struct kvec *) iovec, iovcnt, size);
+
+#ifdef AFS_RXERRQ_ENV
+ if (code < 0) {
+ while (osi_HandleSocketError(sop))
+ ;
+ }
+#endif
+
return (code < 0) ? code : 0;
}
osi_Panic("Too many (%d) iovecs passed to osi_NetReceive\n", iovcnt);
}
-#ifdef AFS_RXERRQ_ENV
- while (osi_HandleSocketError(so))
- ;
-#endif
-
memcpy(tmpvec, iov, iovcnt * sizeof(struct iovec));
msg.msg_name = from;
msg.msg_iov = tmpvec;
flush_signals(current); /* We don't want no stinkin' signals. */
rxk_lastSocketError = code;
rxk_nSocketErrors++;
+
+#ifdef AFS_RXERRQ_ENV
+ while (osi_HandleSocketError(so))
+ ;
+#endif
} else {
*lengthp = code;
code = 0;
int
rxi_Recvmsg(osi_socket socket, struct msghdr *msg_p, int flags)
{
+ int code;
+ code = recvmsg(socket, msg_p, flags);
+
#ifdef AFS_RXERRQ_ENV
- while((rxi_HandleSocketError(socket)) > 0)
- ;
+ if (code < 0) {
+ while((rxi_HandleSocketError(socket)) > 0)
+ ;
+ }
#endif
- return recvmsg(socket, msg_p, flags);
+
+ return code;
}
/*
rxi_Recvmsg(osi_socket socket, struct msghdr *msg_p, int flags)
{
int ret;
+ ret = recvmsg(socket, msg_p, flags);
+
#ifdef AFS_RXERRQ_ENV
- while((rxi_HandleSocketError(socket)) > 0)
- ;
+ if (ret < 0) {
+ while (rxi_HandleSocketError(socket) > 0)
+ ;
+ }
#endif
- ret = recvmsg(socket, msg_p, flags);
+
return ret;
}
{
int ret;
ret = sendmsg(socket, msg_p, flags);
-#ifdef AFS_LINUX22_ENV
+
+#ifdef AFS_RXERRQ_ENV
+ if (ret < 0) {
+ while (rxi_HandleSocketError(socket) > 0)
+ ;
+ }
+ return ret;
+
+#else
+# ifdef AFS_LINUX22_ENV
/* linux unfortunately returns ECONNREFUSED if the target port
* is no longer in use */
/* and EAGAIN if a UDP checksum is incorrect */
if (ret == -1 && errno != ECONNREFUSED && errno != EAGAIN) {
-#else
+# else
if (ret == -1) {
-#endif
+# endif
dpf(("rxi_sendmsg failed, error %d\n", errno));
fflush(stdout);
-#ifndef AFS_NT40_ENV
+# ifndef AFS_NT40_ENV
if (errno > 0)
return -errno;
-#else
+# else
if (WSAGetLastError() > 0)
return -WSAGetLastError();
-#endif
+# endif
return -1;
}
return 0;
+#endif /* !AFS_RXERRQ_ENV */
}
struct rx_ts_info_t * rx_ts_info_init(void) {