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;
/* connect to server */
if (connect(sockfd, ipaddr->get_sockaddr(), ipaddr->get_sockaddr_len()) < 0) {
save_errno = errno;
- close(sockfd);
+ socketClose(sockfd);
continue;
}
*fatal = 0;
return bnet_send(bs);
}
+int bnet_get_peer(BSOCK *bs, char *buf, socklen_t buflen) {
+#if !defined(HAVE_WIN32)
+ if (bs->peer_addr.sin_family == 0) {
+ socklen_t salen = sizeof(bs->peer_addr);
+ int rval = (getpeername)(bs->fd, (struct sockaddr *)&bs->peer_addr, &salen);
+ if (rval < 0) return rval;
+ }
+ if (!inet_ntop(bs->peer_addr.sin_family, &bs->peer_addr.sin_addr, buf, buflen))
+ return -1;
+
+ return 0;
+#else
+ return -1;
+#endif
+}
/*
* Set the network buffer size, suggested size is in size.
* Actual size obtained is returned in bs->msglen
bsock->who = bstrdup(who);
bsock->host = bstrdup(host);
bsock->port = port;
+ memset(&bsock->peer_addr, 0, sizeof(bsock->peer_addr));
memcpy(&bsock->client_addr, client_addr, sizeof(bsock->client_addr));
/*
* ****FIXME**** reduce this to a few hours once