misc. stuff related to [RT #1293]

This commit is contained in:
Brian Wellington
2001-06-07 00:21:53 +00:00
parent 4320bd8518
commit 224e84bc0e

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: socket.c,v 1.201 2001/06/04 19:33:36 tale Exp $ */ /* $Id: socket.c,v 1.202 2001/06/07 00:21:53 bwelling Exp $ */
#include <config.h> #include <config.h>
@@ -888,7 +888,8 @@ doio_recv(isc_socket_t *sock, isc_socketevent_t *dev) {
isc_msgcat, ISC_MSGSET_SOCKET, isc_msgcat, ISC_MSGSET_SOCKET,
ISC_MSG_DOIORECV, ISC_MSG_DOIORECV,
"doio_recv: recvmsg(%d) %d bytes, err %d/%s", "doio_recv: recvmsg(%d) %d bytes, err %d/%s",
sock->fd, cc, recv_errno, strerror(recv_errno)); sock->fd, cc, recv_errno,
strerror(recv_errno));
#define SOFT_OR_HARD(_system, _isc) \ #define SOFT_OR_HARD(_system, _isc) \
if (recv_errno == _system) { \ if (recv_errno == _system) { \
@@ -1013,24 +1014,26 @@ doio_send(isc_socket_t *sock, isc_socketevent_t *dev) {
char *cmsg = NULL; char *cmsg = NULL;
#endif #endif
int attempts = 0; int attempts = 0;
int send_errno;
build_msghdr_send(sock, dev, &msghdr, cmsg, iov, &write_count); build_msghdr_send(sock, dev, &msghdr, cmsg, iov, &write_count);
resend: resend:
cc = sendmsg(sock->fd, &msghdr, 0); cc = sendmsg(sock->fd, &msghdr, 0);
send_errno = errno;
/* /*
* Check for error or block condition. * Check for error or block condition.
*/ */
if (cc < 0) { if (cc < 0) {
if (errno == EINTR && ++attempts < NRETRIES) if (send_errno == EINTR && ++attempts < NRETRIES)
goto resend; goto resend;
if (SOFT_ERROR(errno)) if (SOFT_ERROR(send_errno))
return (DOIO_SOFT); return (DOIO_SOFT);
#define SOFT_OR_HARD(_system, _isc) \ #define SOFT_OR_HARD(_system, _isc) \
if (errno == _system) { \ if (send_errno == _system) { \
if (sock->connected) { \ if (sock->connected) { \
dev->result = _isc; \ dev->result = _isc; \
return (DOIO_HARD); \ return (DOIO_HARD); \
@@ -1038,7 +1041,7 @@ doio_send(isc_socket_t *sock, isc_socketevent_t *dev) {
return (DOIO_SOFT); \ return (DOIO_SOFT); \
} }
#define ALWAYS_HARD(_system, _isc) \ #define ALWAYS_HARD(_system, _isc) \
if (errno == _system) { \ if (send_errno == _system) { \
dev->result = _isc; \ dev->result = _isc; \
return (DOIO_HARD); \ return (DOIO_HARD); \
} }
@@ -1071,8 +1074,8 @@ doio_send(isc_socket_t *sock, isc_socketevent_t *dev) {
isc_sockaddr_format(&dev->address, addrbuf, sizeof(addrbuf)); isc_sockaddr_format(&dev->address, addrbuf, sizeof(addrbuf));
UNEXPECTED_ERROR(__FILE__, __LINE__, UNEXPECTED_ERROR(__FILE__, __LINE__,
"internal_send: %s: %s", "internal_send: %s: %s",
addrbuf, strerror(errno)); addrbuf, strerror(send_errno));
dev->result = ISC_R_UNEXPECTED; dev->result = isc__errno2result(send_errno);
return (DOIO_HARD); return (DOIO_HARD);
} }