Module: SocketKeepalive

Defined in:
ext/socket_keepalive.c

Defined Under Namespace

Classes: Error

Class Method Summary collapse

Class Method Details

.get_keepalive(vSockfd) ⇒ Object

get SO_KEEPALIVE



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'ext/socket_keepalive.c', line 7

static VALUE rb_sk_get_keepalive(VALUE self, VALUE vSockfd) {
  int sockfd, optval, rv;
  socklen_t optlen;

  sockfd = NUM2INT(vSockfd);

  optlen = sizeof(optval);
  rv = getsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (void*) &optval, &optlen);

  if (rv != 0) { 
    rb_raise(rb_eSocketKeepaliveError, "%s", strerror(errno));
  }

  return(optval ? Qtrue : Qfalse);
}

.get_keepcnt(vSockfd) ⇒ Object

get TCP_KEEPCNT



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'ext/socket_keepalive.c', line 131

static VALUE rb_sk_get_keepcnt(VALUE self, VALUE vSockfd) {
#ifdef TCP_KEEPCNT
  int sockfd, optval, rv;
  socklen_t optlen;

  sockfd = NUM2INT(vSockfd);

  optlen = sizeof(optval);
  rv = getsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, (void*) &optval, &optlen);

  if (rv != 0) { 
    rb_raise(rb_eSocketKeepaliveError, "%s", strerror(errno));
  }

  return INT2NUM(optval);
#else
  return Qnil;
#endif
}

.get_keepidle(vSockfd) ⇒ Object

get TCP_KEEPIDLE



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'ext/socket_keepalive.c', line 53

static VALUE rb_sk_get_keepidle(VALUE self, VALUE vSockfd) {
#ifdef TCP_KEEPIDLE
  int sockfd, optval, rv;
  socklen_t optlen;

  sockfd = NUM2INT(vSockfd);

  optlen = sizeof(optval);
  rv = getsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, (void*) &optval, &optlen);

  if (rv != 0) { 
    rb_raise(rb_eSocketKeepaliveError, "%s", strerror(errno));
  }

  return INT2NUM(optval);
#else
  return Qnil;
#endif
}

.get_keepintvl(vSockfd) ⇒ Object

get TCP_KEEPINTVL



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'ext/socket_keepalive.c', line 92

static VALUE rb_sk_get_keepintvl(VALUE self, VALUE vSockfd) {
#ifdef TCP_KEEPINTVL
  int sockfd, optval, rv;
  socklen_t optlen;

  sockfd = NUM2INT(vSockfd);

  optlen = sizeof(optval);
  rv = getsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, (void*) &optval, &optlen);

  if (rv != 0) { 
    rb_raise(rb_eSocketKeepaliveError, "%s", strerror(errno));
  }

  return INT2NUM(optval);
#else
  return Qnil;
#endif
}

.set_keepalive(vSockfd, vOptval) ⇒ Object

set SO_KEEPALIVE



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'ext/socket_keepalive.c', line 24

static VALUE rb_sk_set_keepalive(VALUE self, VALUE vSockfd, VALUE vOptval) {
  int sockfd, optval, rv;
  const char *classname;

  sockfd = NUM2INT(vSockfd);

  switch (TYPE(vOptval)) {
  case T_TRUE:
    optval = 1;
    break;
  case T_FALSE:
    optval = 0;
    break;
  default:
    classname = rb_class2name(CLASS_OF(vOptval));
    rb_raise(rb_eTypeError, "wrong argument type %s (expected TrueClass or FalseClass)", classname);
    break;
  }

  rv = setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (void*) &optval, sizeof(optval));

  if (rv != 0) { 
    rb_raise(rb_eSocketKeepaliveError, "%s", strerror(errno));
  }

  return Qnil;
}

.set_keepcnt(vSockfd, vOptval) ⇒ Object

set TCP_KEEPCNT



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'ext/socket_keepalive.c', line 152

static VALUE rb_sk_set_keepcnt(VALUE self, VALUE vSockfd, VALUE vOptval) {
#ifdef TCP_KEEPCNT
  int sockfd, optval, rv;

  sockfd = NUM2INT(vSockfd);
  optval = NUM2INT(vOptval);

  rv = setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, (void*) &optval, sizeof(optval));

  if (rv != 0) { 
    rb_raise(rb_eSocketKeepaliveError, "%s", strerror(errno));
  }

  return Qnil;
#endif
}

.set_keepidle(vSockfd, vOptval) ⇒ Object

set TCP_KEEPIDLE



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'ext/socket_keepalive.c', line 74

static VALUE rb_sk_set_keepidle(VALUE self, VALUE vSockfd, VALUE vOptval) {
#ifdef TCP_KEEPIDLE
  int sockfd, optval, rv;

  sockfd = NUM2INT(vSockfd);
  optval = NUM2INT(vOptval);

  rv = setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, (void*) &optval, sizeof(optval));

  if (rv != 0) { 
    rb_raise(rb_eSocketKeepaliveError, "%s", strerror(errno));
  }
#endif

  return Qnil;
}

.set_keepintvl(vSockfd, vOptval) ⇒ Object

set TCP_KEEPINTVL



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'ext/socket_keepalive.c', line 113

static VALUE rb_sk_set_keepintvl(VALUE self, VALUE vSockfd, VALUE vOptval) {
#ifdef TCP_KEEPINTVL
  int sockfd, optval, rv;

  sockfd = NUM2INT(vSockfd);
  optval = NUM2INT(vOptval);

  rv = setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, (void*) &optval, sizeof(optval));

  if (rv != 0) { 
    rb_raise(rb_eSocketKeepaliveError, "%s", strerror(errno));
  }
#endif

  return Qnil;
}