int NetHandler::create_socket(int domain, bool reuse_addr)
{
int s;
+ int r = 0;
if ((s = ::socket(domain, SOCK_STREAM, 0)) == -1) {
- lderr(cct) << __func__ << " couldn't create socket " << cpp_strerror(errno) << dendl;
- return -errno;
+ r = errno;
+ lderr(cct) << __func__ << " couldn't create socket " << cpp_strerror(r) << dendl;
+ return -r;
}
#if !defined(__FreeBSD__)
if (reuse_addr) {
int on = 1;
if (::setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) {
+ r = errno;
lderr(cct) << __func__ << " setsockopt SO_REUSEADDR failed: "
- << strerror(errno) << dendl;
+ << strerror(r) << dendl;
close(s);
- return -errno;
+ return -r;
}
}
#endif
int NetHandler::set_nonblock(int sd)
{
int flags;
+ int r = 0;
/* Set the socket nonblocking.
* Note that fcntl(2) for F_GETFL and F_SETFL can't be
* interrupted by a signal. */
if ((flags = fcntl(sd, F_GETFL)) < 0 ) {
- lderr(cct) << __func__ << " fcntl(F_GETFL) failed: " << strerror(errno) << dendl;
- return -errno;
+ r = errno;
+ lderr(cct) << __func__ << " fcntl(F_GETFL) failed: " << cpp_strerror(r) << dendl;
+ return -r;
}
if (fcntl(sd, F_SETFL, flags | O_NONBLOCK) < 0) {
- lderr(cct) << __func__ << " fcntl(F_SETFL,O_NONBLOCK): " << strerror(errno) << dendl;
- return -errno;
+ r = errno;
+ lderr(cct) << __func__ << " fcntl(F_SETFL,O_NONBLOCK): " << cpp_strerror(r) << dendl;
+ return -r;
}
return 0;
int flag = 1;
r = ::setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(flag));
if (r < 0) {
- r = -errno;
+ r = errno;
ldout(cct, 0) << "couldn't set TCP_NODELAY: " << cpp_strerror(r) << dendl;
}
}
if (size) {
r = ::setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (void*)&size, sizeof(size));
if (r < 0) {
- r = -errno;
+ r = errno;
ldout(cct, 0) << "couldn't set SO_RCVBUF to " << size << ": " << cpp_strerror(r) << dendl;
}
}
int val = 1;
r = ::setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (void*)&val, sizeof(val));
if (r) {
- r = -errno;
+ r = errno;
ldout(cct,0) << "couldn't set SO_NOSIGPIPE: " << cpp_strerror(r) << dendl;
}
#endif
- return r;
+ return -r;
}
void NetHandler::set_priority(int sd, int prio, int domain)
addr.set_port(0);
ret = ::bind(s, addr.get_sockaddr(), addr.get_sockaddr_len());
if (ret < 0) {
- ret = -errno;
+ ret = errno;
ldout(cct, 2) << __func__ << " client bind error " << ", " << cpp_strerror(ret) << dendl;
close(s);
- return ret;
+ return -ret;
}
}
}
ret = ::connect(s, addr.get_sockaddr(), addr.get_sockaddr_len());
if (ret < 0) {
+ ret = errno;
if (errno == EINPROGRESS && nonblock)
return s;
- ldout(cct, 10) << __func__ << " connect: " << strerror(errno) << dendl;
+ ldout(cct, 10) << __func__ << " connect: " << cpp_strerror(ret) << dendl;
close(s);
- return -errno;
+ return -ret;
}
return s;
int NetHandler::reconnect(const entity_addr_t &addr, int sd)
{
+ int r = 0;
int ret = ::connect(sd, addr.get_sockaddr(), addr.get_sockaddr_len());
if (ret < 0 && errno != EISCONN) {
- ldout(cct, 10) << __func__ << " reconnect: " << strerror(errno) << dendl;
- if (errno == EINPROGRESS || errno == EALREADY)
+ r = errno;
+ ldout(cct, 10) << __func__ << " reconnect: " << strerror(r) << dendl;
+ if (r == EINPROGRESS || r == EALREADY)
return 1;
- return -errno;
+ return -r;
}
return 0;