nleft = nbytes;
while (nleft > 0) {
- do {
- errno = 0;
- nread = socketRead(bsock->fd, ptr, nleft);
- if (bsock->timed_out || bsock->terminated) {
- return nread;
+ errno = 0;
+ nread = socketRead(bsock->fd, ptr, nleft);
+ if (bsock->timed_out || bsock->terminated) {
+ return nread;
+ }
+ if (nread == -1) {
+ if (errno == EINTR) {
+ continue;
+ }
+ if (errno == EAGAIN) {
+ bmicrosleep(0, 200000); /* try again in 200ms */
+ continue;
}
- } while (nread == -1 && (errno == EINTR || errno == EAGAIN));
+ }
if (nread <= 0) {
return nread; /* error, or EOF */
}
int32_t nbytes;
int32_t pktsiz;
- ASSERT(bsock != NULL);
+ if (!bsock) {
+ return BNET_HARDEOF;
+ }
bsock->msg[0] = 0;
bsock->msglen = 0;
if (bsock->errors || bsock->terminated) {
}
} else {
Qmsg5(bsock->jcr, M_ERROR, 0,
- _("Wrote %d bytes to %s:%s:%d, but only %d accepted.\n"), bsock->who,
- bsock->host, bsock->port, bsock->msglen, rc);
+ _("Wrote %d bytes to %s:%s:%d, but only %d accepted.\n"),
+ sizeof(int32_t), bsock->who,
+ bsock->host, bsock->port, rc);
}
return false;
}
FD_ZERO(&fdset);
FD_SET((unsigned)bsock->fd, &fdset);
- tv.tv_sec = sec;
- tv.tv_usec = 0;
for (;;) {
+ tv.tv_sec = sec;
+ tv.tv_usec = 0;
switch (select(bsock->fd + 1, &fdset, NULL, NULL, &tv)) {
case 0: /* timeout */
bsock->b_errno = 0;
return 0;
case -1:
bsock->b_errno = errno;
- if (errno == EINTR || errno == EAGAIN) {
+ if (errno == EINTR) {
continue;
}
return -1; /* error return */
/* connect to server */
if (connect(sockfd, ipaddr->get_sockaddr(), ipaddr->get_sockaddr_len()) < 0) {
save_errno = errno;
- close(sockfd);
+ socketClose(sockfd);
continue;
}
*fatal = 0;
int oflags;
/* Get current flags */
- if((oflags = fcntl(bsock->fd, F_GETFL, 0)) < 0) {
+ if ((oflags = fcntl(bsock->fd, F_GETFL, 0)) < 0) {
berrno be;
- Emsg1(M_ABORT, 0, _("fcntl F_GETFL error. ERR=%s\n"), be.strerror());
+ Jmsg1(bsock->jcr, M_ABORT, 0, _("fcntl F_GETFL error. ERR=%s\n"), be.strerror());
}
/* Set O_NONBLOCK flag */
- if((fcntl(bsock->fd, F_SETFL, oflags|O_NONBLOCK)) < 0) {
+ if ((fcntl(bsock->fd, F_SETFL, oflags|O_NONBLOCK)) < 0) {
berrno be;
- Emsg1(M_ABORT, 0, _("fcntl F_SETFL error. ERR=%s\n"), be.strerror());
+ Jmsg1(bsock->jcr, M_ABORT, 0, _("fcntl F_SETFL error. ERR=%s\n"), be.strerror());
}
bsock->blocking = 0;
ioctlsocket(bsock->fd, FIONBIO, &ioctlArg);
bsock->blocking = 0;
- return (flags);
+ return flags;
#endif
}
* Set socket blocking
* Returns previous socket flags
*/
-int bnet_set_blocking (BSOCK *bsock) {
+int bnet_set_blocking (BSOCK *bsock)
+{
#ifndef WIN32
int oflags;
/* Get current flags */
- if((oflags = fcntl(bsock->fd, F_GETFL, 0)) < 0) {
+ if ((oflags = fcntl(bsock->fd, F_GETFL, 0)) < 0) {
berrno be;
- Emsg1(M_ABORT, 0, _("fcntl F_GETFL error. ERR=%s\n"), be.strerror());
+ Jmsg1(bsock->jcr, M_ABORT, 0, _("fcntl F_GETFL error. ERR=%s\n"), be.strerror());
}
/* Set O_NONBLOCK flag */
- if((fcntl(bsock->fd, F_SETFL, oflags & ~O_NONBLOCK)) < 0) {
+ if ((fcntl(bsock->fd, F_SETFL, oflags & ~O_NONBLOCK)) < 0) {
berrno be;
- Emsg1(M_ABORT, 0, _("fcntl F_SETFL error. ERR=%s\n"), be.strerror());
+ Jmsg1(bsock->jcr, M_ABORT, 0, _("fcntl F_SETFL error. ERR=%s\n"), be.strerror());
}
bsock->blocking = 1;
- return (oflags);
+ return oflags;
#else
int flags;
u_long ioctlArg = 0;
ioctlsocket(bsock->fd, FIONBIO, &ioctlArg);
bsock->blocking = 1;
- return (flags);
+ return flags;
#endif
}
/*
* Restores socket flags
*/
-void bnet_restore_blocking (BSOCK *bsock, int flags) {
+void bnet_restore_blocking (BSOCK *bsock, int flags)
+{
#ifndef WIN32
- if((fcntl(bsock->fd, F_SETFL, flags)) < 0) {
+ if ((fcntl(bsock->fd, F_SETFL, flags)) < 0) {
berrno be;
- Emsg1(M_ABORT, 0, _("fcntl F_SETFL error. ERR=%s\n"), be.strerror());
+ Jmsg1(bsock->jcr, M_ABORT, 0, _("fcntl F_SETFL error. ERR=%s\n"), be.strerror());
}
bsock->blocking = (flags & O_NONBLOCK);