}
}
-void NetHandler::set_socket_options(int sd, bool nodelay, int size)
+int NetHandler::set_socket_options(int sd, bool nodelay, int size)
{
+ int r = 0;
// disable Nagle algorithm?
if (nodelay) {
int flag = 1;
- int r = ::setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(flag));
+ r = ::setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(flag));
if (r < 0) {
r = -errno;
ldout(cct, 0) << "couldn't set TCP_NODELAY: " << cpp_strerror(r) << dendl;
}
}
if (size) {
- int r = ::setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (void*)&size, sizeof(size));
+ r = ::setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (void*)&size, sizeof(size));
if (r < 0) {
r = -errno;
ldout(cct, 0) << "couldn't set SO_RCVBUF to " << size << ": " << cpp_strerror(r) << dendl;
// block ESIGPIPE
#ifdef SO_NOSIGPIPE
int val = 1;
- int r = ::setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (void*)&val, sizeof(val));
+ r = ::setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (void*)&val, sizeof(val));
if (r) {
r = -errno;
ldout(cct,0) << "couldn't set SO_NOSIGPIPE: " << cpp_strerror(r) << dendl;
}
#endif
+ return r;
}
void NetHandler::set_priority(int sd, int prio)
namespace ceph {
class NetHandler {
- private:
- int create_socket(int domain, bool reuse_addr=false);
int generic_connect(const entity_addr_t& addr, bool nonblock);
CephContext *cct;
public:
+ int create_socket(int domain, bool reuse_addr=false);
explicit NetHandler(CephContext *c): cct(c) {}
int set_nonblock(int sd);
void set_close_on_exec(int sd);
- void set_socket_options(int sd, bool nodelay, int size);
+ int set_socket_options(int sd, bool nodelay, int size);
int connect(const entity_addr_t &addr);
/**