eventmachine 1.2.0.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7803a93b533f7fa10bbc151ce1e8bbe11ed4925
4
- data.tar.gz: cf2d3cfd4083b65b119959a2b0b6f4c7af712997
3
+ metadata.gz: 41547bb89b0711eee296557175b254fa3679448f
4
+ data.tar.gz: e76ab566210fc7c034f3ad23f0db583514462b43
5
5
  SHA512:
6
- metadata.gz: a634095988905c93e04e588c0aad3da73c3211dcdaec626d399193d21c592f37b91c7478e09d8d15e58423eb61c04fbb73eab6c254871cb3a2f65c41dee0cb71
7
- data.tar.gz: a3bcd4dd5e772ff931e016ce0908c0858b6510336092bd1ded11c59da5758599b03d4960a19e8aa95c086b526b2e3452ba4c7f6d34ddd4d2ce23c8f42490ce56
6
+ metadata.gz: 5c0338c33a125469f174e372c71a6142adf57af643846509e14f79cfac33b0b812f08390a1f651c45bf3357815014375a78685514c8bfcadd3a3514a5394783a
7
+ data.tar.gz: d2cd4be5a207f01003ed8ab928a6354178672702089b0da2a13ef0dbaf63f45221cfdbfdb753f5e318ac2decb2caeae7de3569540e2cfd1d5ffb7eba6d700a6b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.1 (November 15, 2016)
4
+ * Throw strerror(errno) when getsockname or getpeername fail [#683]
5
+ * Use a single concrete implementation of getpeername/getsockname, the rest pure virtuals [#683]
6
+ * Use gai_strerror to get the failure string from getaddrinfo [#744]
7
+ * Fix deregistering descriptor when using KQUEUE [#728]
8
+ * Fix to enable to work an example code in EM::Pool [#731]
9
+ * LineText2: Add regular expression delimiter support [#706]
10
+ * Pure Ruby: EM rescue ECONNREFUSED on initial TCP connect [#741]
11
+ * Pure Ruby: EM SSL (working start_tls) [#712]
12
+ * Pure Ruby: EM fixes [#707]
13
+ * Java: Use Acceptors to get peer and sock names if not present in Connections [#743]
14
+
3
15
  ## 1.2.0.1 (March 15, 2016)
4
16
  * Fix crash when accepting IPv6 connections due to struct sockaddr_in [#698, #699]
5
17
 
data/README.md CHANGED
@@ -32,7 +32,7 @@ EventMachine has been around since the early 2000s and is a mature and battle-te
32
32
 
33
33
  ## What platforms are supported by EventMachine? ##
34
34
 
35
- EventMachine supports Ruby >= 1.8.7 and <= 2.2 REE, JRuby and **works well on Windows** as well
35
+ EventMachine supports Ruby 1.8.7 through 2.3, REE, JRuby and **works well on Windows** as well
36
36
  as many operating systems from the Unix family (Linux, Mac OS X, BSD flavors).
37
37
 
38
38
 
@@ -54,34 +54,36 @@ or add this to your Gemfile if you use [Bundler](http://gembundler.com/):
54
54
  For an introduction to EventMachine, check out:
55
55
 
56
56
  * [blog post about EventMachine by Ilya Grigorik](http://www.igvita.com/2008/05/27/ruby-eventmachine-the-speed-demon/).
57
- * [EventMachine Introductions by Dan Sinclair](http://everburning.com/news/eventmachine-introductions/).
57
+ * [EventMachine Introductions by Dan Sinclair](http://everburning.com/news/eventmachine-introductions.html).
58
58
 
59
59
 
60
60
  ### Server example: Echo server ###
61
61
 
62
62
  Here's a fully-functional echo server written with EventMachine:
63
63
 
64
- require 'eventmachine'
65
-
66
- module EchoServer
67
- def post_init
68
- puts "-- someone connected to the echo server!"
69
- end
70
-
71
- def receive_data data
72
- send_data ">>>you sent: #{data}"
73
- close_connection if data =~ /quit/i
74
- end
75
-
76
- def unbind
77
- puts "-- someone disconnected from the echo server!"
78
- end
79
- end
80
-
81
- # Note that this will block current thread.
82
- EventMachine.run {
83
- EventMachine.start_server "127.0.0.1", 8081, EchoServer
84
- }
64
+ ```ruby
65
+ require 'eventmachine'
66
+
67
+ module EchoServer
68
+ def post_init
69
+ puts "-- someone connected to the echo server!"
70
+ end
71
+
72
+ def receive_data data
73
+ send_data ">>>you sent: #{data}"
74
+ close_connection if data =~ /quit/i
75
+ end
76
+
77
+ def unbind
78
+ puts "-- someone disconnected from the echo server!"
79
+ end
80
+ end
81
+
82
+ # Note that this will block current thread.
83
+ EventMachine.run {
84
+ EventMachine.start_server "127.0.0.1", 8081, EchoServer
85
+ }
86
+ ```
85
87
 
86
88
 
87
89
  ## EventMachine documentation ##
data/ext/ed.cpp CHANGED
@@ -340,6 +340,45 @@ void EventableDescriptor::_GenericInboundDispatch(const char *buf, unsigned long
340
340
  }
341
341
 
342
342
 
343
+ /*********************************
344
+ EventableDescriptor::_GenericGetPeername
345
+ *********************************/
346
+
347
+ bool EventableDescriptor::_GenericGetPeername (struct sockaddr *s, socklen_t *len)
348
+ {
349
+ if (!s)
350
+ return false;
351
+
352
+ int gp = getpeername (GetSocket(), s, len);
353
+ if (gp == -1) {
354
+ char buf[200];
355
+ snprintf (buf, sizeof(buf)-1, "unable to get peer name: %s", strerror(errno));
356
+ throw std::runtime_error (buf);
357
+ }
358
+
359
+ return true;
360
+ }
361
+
362
+ /*********************************
363
+ EventableDescriptor::_GenericGetSockname
364
+ *********************************/
365
+
366
+ bool EventableDescriptor::_GenericGetSockname (struct sockaddr *s, socklen_t *len)
367
+ {
368
+ if (!s)
369
+ return false;
370
+
371
+ int gp = getsockname (GetSocket(), s, len);
372
+ if (gp == -1) {
373
+ char buf[200];
374
+ snprintf (buf, sizeof(buf)-1, "unable to get sock name: %s", strerror(errno));
375
+ throw std::runtime_error (buf);
376
+ }
377
+
378
+ return true;
379
+ }
380
+
381
+
343
382
  /*********************************************
344
383
  EventableDescriptor::GetPendingConnectTimeout
345
384
  *********************************************/
@@ -1628,23 +1667,6 @@ void AcceptorDescriptor::Heartbeat()
1628
1667
  }
1629
1668
 
1630
1669
 
1631
- /*******************************
1632
- AcceptorDescriptor::GetSockname
1633
- *******************************/
1634
-
1635
- bool AcceptorDescriptor::GetSockname (struct sockaddr *s, socklen_t *len)
1636
- {
1637
- bool ok = false;
1638
- if (s) {
1639
- int gp = getsockname (GetSocket(), s, len);
1640
- if (gp == 0)
1641
- ok = true;
1642
- }
1643
- return ok;
1644
- }
1645
-
1646
-
1647
-
1648
1670
  /**************************************
1649
1671
  DatagramDescriptor::DatagramDescriptor
1650
1672
  **************************************/
@@ -1922,7 +1944,7 @@ int DatagramDescriptor::SendOutboundDatagram (const char *data, unsigned long le
1922
1944
 
1923
1945
  struct sockaddr_in6 addr_here;
1924
1946
  size_t addr_here_len = sizeof addr_here;
1925
- if (!EventMachine_t::name2address (address, port, (struct sockaddr *)&addr_here, &addr_here_len))
1947
+ if (0 != EventMachine_t::name2address (address, port, (struct sockaddr *)&addr_here, &addr_here_len))
1926
1948
  return -1;
1927
1949
 
1928
1950
  if (!data && (length > 0))
@@ -1950,37 +1972,6 @@ int DatagramDescriptor::SendOutboundDatagram (const char *data, unsigned long le
1950
1972
  }
1951
1973
 
1952
1974
 
1953
- /*********************************
1954
- ConnectionDescriptor::GetPeername
1955
- *********************************/
1956
-
1957
- bool ConnectionDescriptor::GetPeername (struct sockaddr *s, socklen_t *len)
1958
- {
1959
- bool ok = false;
1960
- if (s) {
1961
- int gp = getpeername (GetSocket(), s, len);
1962
- if (gp == 0)
1963
- ok = true;
1964
- }
1965
- return ok;
1966
- }
1967
-
1968
- /*********************************
1969
- ConnectionDescriptor::GetSockname
1970
- *********************************/
1971
-
1972
- bool ConnectionDescriptor::GetSockname (struct sockaddr *s, socklen_t *len)
1973
- {
1974
- bool ok = false;
1975
- if (s) {
1976
- int gp = getsockname (GetSocket(), s, len);
1977
- if (gp == 0)
1978
- ok = true;
1979
- }
1980
- return ok;
1981
- }
1982
-
1983
-
1984
1975
  /**********************************************
1985
1976
  ConnectionDescriptor::GetCommInactivityTimeout
1986
1977
  **********************************************/
@@ -2018,22 +2009,6 @@ bool DatagramDescriptor::GetPeername (struct sockaddr *s, socklen_t *len)
2018
2009
  return ok;
2019
2010
  }
2020
2011
 
2021
- /*******************************
2022
- DatagramDescriptor::GetSockname
2023
- *******************************/
2024
-
2025
- bool DatagramDescriptor::GetSockname (struct sockaddr *s, socklen_t *len)
2026
- {
2027
- bool ok = false;
2028
- if (s) {
2029
- int gp = getsockname (GetSocket(), s, len);
2030
- if (gp == 0)
2031
- ok = true;
2032
- }
2033
- return ok;
2034
- }
2035
-
2036
-
2037
2012
 
2038
2013
  /********************************************
2039
2014
  DatagramDescriptor::GetCommInactivityTimeout
data/ext/ed.h CHANGED
@@ -64,8 +64,8 @@ class EventableDescriptor: public Bindable_t
64
64
 
65
65
  void SetEventCallback (EMCallback);
66
66
 
67
- virtual bool GetPeername (struct sockaddr*, socklen_t*) {return false;}
68
- virtual bool GetSockname (struct sockaddr*, socklen_t*) {return false;}
67
+ virtual bool GetPeername (struct sockaddr*, socklen_t*) = 0;
68
+ virtual bool GetSockname (struct sockaddr*, socklen_t*) = 0;
69
69
  virtual bool GetSubprocessPid (pid_t*) {return false;}
70
70
 
71
71
  virtual void StartTls() {}
@@ -117,7 +117,9 @@ class EventableDescriptor: public Bindable_t
117
117
  bool bWatchOnly;
118
118
 
119
119
  EMCallback EventCallback;
120
- void _GenericInboundDispatch(const char *buffer, unsigned long size);
120
+ void _GenericInboundDispatch (const char *buffer, unsigned long size);
121
+ bool _GenericGetPeername (struct sockaddr*, socklen_t*);
122
+ bool _GenericGetSockname (struct sockaddr*, socklen_t*);
121
123
 
122
124
  uint64_t CreatedAt;
123
125
  bool bCallbackUnbind;
@@ -164,6 +166,9 @@ class LoopbreakDescriptor: public EventableDescriptor
164
166
 
165
167
  virtual bool SelectForRead() {return true;}
166
168
  virtual bool SelectForWrite() {return false;}
169
+
170
+ virtual bool GetPeername (struct sockaddr* s, socklen_t* len) { return _GenericGetPeername (s, len); }
171
+ virtual bool GetSockname (struct sockaddr* s, socklen_t* len) { return _GenericGetSockname (s, len); }
167
172
  };
168
173
 
169
174
 
@@ -219,8 +224,8 @@ class ConnectionDescriptor: public EventableDescriptor
219
224
 
220
225
  void SetServerMode() {bIsServer = true;}
221
226
 
222
- virtual bool GetPeername (struct sockaddr*, socklen_t*);
223
- virtual bool GetSockname (struct sockaddr*, socklen_t*);
227
+ virtual bool GetPeername (struct sockaddr* s, socklen_t* len) { return _GenericGetPeername (s, len); }
228
+ virtual bool GetSockname (struct sockaddr* s, socklen_t* len) { return _GenericGetSockname (s, len); }
224
229
 
225
230
  virtual uint64_t GetCommInactivityTimeout();
226
231
  virtual int SetCommInactivityTimeout (uint64_t value);
@@ -305,8 +310,8 @@ class DatagramDescriptor: public EventableDescriptor
305
310
  // Do we have any data to write? This is used by ShouldDelete.
306
311
  virtual int GetOutboundDataSize() {return OutboundDataSize;}
307
312
 
308
- virtual bool GetPeername (struct sockaddr*, socklen_t*);
309
- virtual bool GetSockname (struct sockaddr*, socklen_t*);
313
+ virtual bool GetPeername (struct sockaddr* s, socklen_t* len);
314
+ virtual bool GetSockname (struct sockaddr* s, socklen_t* len) { return _GenericGetSockname (s, len); };
310
315
 
311
316
  virtual uint64_t GetCommInactivityTimeout();
312
317
  virtual int SetCommInactivityTimeout (uint64_t value);
@@ -345,7 +350,8 @@ class AcceptorDescriptor: public EventableDescriptor
345
350
  virtual bool SelectForRead() {return true;}
346
351
  virtual bool SelectForWrite() {return false;}
347
352
 
348
- virtual bool GetSockname (struct sockaddr*, socklen_t*);
353
+ virtual bool GetPeername (struct sockaddr* s, socklen_t* len) { return _GenericGetPeername (s, len); }
354
+ virtual bool GetSockname (struct sockaddr* s, socklen_t* len) { return _GenericGetSockname (s, len); };
349
355
 
350
356
  static void StopAcceptor (const uintptr_t binding);
351
357
  };
@@ -371,6 +377,9 @@ class PipeDescriptor: public EventableDescriptor
371
377
  int SendOutboundData (const char*, unsigned long);
372
378
  virtual int GetOutboundDataSize() {return OutboundDataSize;}
373
379
 
380
+ virtual bool GetPeername (struct sockaddr* s, socklen_t* len) { return _GenericGetPeername (s, len); }
381
+ virtual bool GetSockname (struct sockaddr* s, socklen_t* len) { return _GenericGetSockname (s, len); }
382
+
374
383
  virtual bool GetSubprocessPid (pid_t*);
375
384
 
376
385
  protected:
@@ -413,6 +422,9 @@ class KeyboardDescriptor: public EventableDescriptor
413
422
  virtual bool SelectForRead() {return true;}
414
423
  virtual bool SelectForWrite() {return false;}
415
424
 
425
+ virtual bool GetPeername (struct sockaddr* s, socklen_t* len) { return _GenericGetPeername (s, len); }
426
+ virtual bool GetSockname (struct sockaddr* s, socklen_t* len) { return _GenericGetSockname (s, len); }
427
+
416
428
  protected:
417
429
  bool bReadAttemptedAfterClose;
418
430
 
@@ -437,6 +449,9 @@ class InotifyDescriptor: public EventableDescriptor
437
449
  virtual void Heartbeat() {}
438
450
  virtual bool SelectForRead() {return true;}
439
451
  virtual bool SelectForWrite() {return false;}
452
+
453
+ virtual bool GetPeername (struct sockaddr* s, socklen_t* len) { return false; }
454
+ virtual bool GetSockname (struct sockaddr* s, socklen_t* len) { return false; }
440
455
  };
441
456
 
442
457
  #endif // __EventableDescriptor__H_
data/ext/em.cpp CHANGED
@@ -217,7 +217,7 @@ void EventMachine_t::ScheduleHalt()
217
217
 
218
218
  bool EventMachine_t::Stopping()
219
219
  {
220
- return bTerminateSignalReceived;
220
+ return bTerminateSignalReceived;
221
221
  }
222
222
 
223
223
  /*******************************
@@ -1194,9 +1194,10 @@ const uintptr_t EventMachine_t::ConnectToServer (const char *bind_addr, int bind
1194
1194
 
1195
1195
  struct sockaddr_storage bind_as;
1196
1196
  size_t bind_as_len = sizeof bind_as;
1197
- if (!name2address (server, port, (struct sockaddr *)&bind_as, &bind_as_len)) {
1197
+ int gai = name2address (server, port, (struct sockaddr *)&bind_as, &bind_as_len);
1198
+ if (gai != 0) {
1198
1199
  char buf [200];
1199
- snprintf (buf, sizeof(buf)-1, "unable to resolve server address: %s", strerror(errno));
1200
+ snprintf (buf, sizeof(buf)-1, "unable to resolve address: %s", gai_strerror(gai));
1200
1201
  throw std::runtime_error (buf);
1201
1202
  }
1202
1203
 
@@ -1222,9 +1223,12 @@ const uintptr_t EventMachine_t::ConnectToServer (const char *bind_addr, int bind
1222
1223
  if (bind_addr) {
1223
1224
  struct sockaddr_storage bind_to;
1224
1225
  size_t bind_to_len = sizeof bind_to;
1225
- if (!name2address (bind_addr, bind_port, (struct sockaddr *)&bind_to, &bind_to_len)) {
1226
+ gai = name2address (bind_addr, bind_port, (struct sockaddr *)&bind_to, &bind_to_len);
1227
+ if (gai != 0) {
1226
1228
  close (sd);
1227
- throw std::runtime_error ("invalid bind address");
1229
+ char buf [200];
1230
+ snprintf (buf, sizeof(buf)-1, "invalid bind address: %s", gai_strerror(gai));
1231
+ throw std::runtime_error (buf);
1228
1232
  }
1229
1233
  if (bind (sd, (struct sockaddr *)&bind_to, bind_to_len) < 0) {
1230
1234
  close (sd);
@@ -1539,7 +1543,7 @@ int EventMachine_t::DetachFD (EventableDescriptor *ed)
1539
1543
  name2address
1540
1544
  ************/
1541
1545
 
1542
- bool EventMachine_t::name2address (const char *server, int port, struct sockaddr *addr, size_t *addr_len)
1546
+ int EventMachine_t::name2address (const char *server, int port, struct sockaddr *addr, size_t *addr_len)
1543
1547
  {
1544
1548
  if (!server || !*server)
1545
1549
  server = "0.0.0.0";
@@ -1553,16 +1557,15 @@ bool EventMachine_t::name2address (const char *server, int port, struct sockaddr
1553
1557
  char portstr[12];
1554
1558
  snprintf(portstr, sizeof(portstr), "%u", port);
1555
1559
 
1556
- if (getaddrinfo (server, portstr, &hints, &ai) == 0) {
1560
+ int gai = getaddrinfo (server, portstr, &hints, &ai);
1561
+ if (gai == 0) {
1557
1562
  assert (ai->ai_addrlen <= *addr_len);
1558
1563
  memcpy (addr, ai->ai_addr, ai->ai_addrlen);
1559
1564
  *addr_len = ai->ai_addrlen;
1560
-
1561
1565
  freeaddrinfo(ai);
1562
- return true;
1563
1566
  }
1564
1567
 
1565
- return false;
1568
+ return gai;
1566
1569
  }
1567
1570
 
1568
1571
 
@@ -1581,7 +1584,7 @@ const uintptr_t EventMachine_t::CreateTcpServer (const char *server, int port)
1581
1584
 
1582
1585
  struct sockaddr_storage bind_here;
1583
1586
  size_t bind_here_len = sizeof bind_here;
1584
- if (!name2address (server, port, (struct sockaddr *)&bind_here, &bind_here_len))
1587
+ if (0 != name2address (server, port, (struct sockaddr *)&bind_here, &bind_here_len))
1585
1588
  return 0;
1586
1589
 
1587
1590
  SOCKET sd_accept = EmSocket (bind_here.ss_family, SOCK_STREAM, 0);
@@ -1636,7 +1639,7 @@ const uintptr_t EventMachine_t::OpenDatagramSocket (const char *address, int por
1636
1639
 
1637
1640
  struct sockaddr_storage bind_here;
1638
1641
  size_t bind_here_len = sizeof bind_here;
1639
- if (!name2address (address, port, (struct sockaddr *)&bind_here, &bind_here_len))
1642
+ if (0 != name2address (address, port, (struct sockaddr *)&bind_here, &bind_here_len))
1640
1643
  return 0;
1641
1644
 
1642
1645
  // from here on, early returns must close the socket!
@@ -1889,6 +1892,14 @@ void EventMachine_t::Deregister (EventableDescriptor *ed)
1889
1892
  ModifiedDescriptors.erase(ed);
1890
1893
  }
1891
1894
  #endif
1895
+
1896
+ #ifdef HAVE_KQUEUE
1897
+ if (Poller == Poller_Kqueue) {
1898
+ assert (ed->GetSocket() != INVALID_SOCKET);
1899
+
1900
+ ModifiedDescriptors.erase(ed);
1901
+ }
1902
+ #endif
1892
1903
  }
1893
1904
 
1894
1905
 
data/ext/em.h CHANGED
@@ -201,7 +201,7 @@ class EventMachine_t
201
201
 
202
202
  Poller_t GetPoller() { return Poller; }
203
203
 
204
- static bool name2address (const char *server, int port, struct sockaddr *addr, size_t *addr_len);
204
+ static int name2address (const char *server, int port, struct sockaddr *addr, size_t *addr_len);
205
205
 
206
206
  private:
207
207
  void _RunTimers();
data/ext/rubymain.cpp CHANGED
@@ -472,8 +472,12 @@ static VALUE t_get_peername (VALUE self UNUSED, VALUE signature)
472
472
  {
473
473
  char buf[1024];
474
474
  socklen_t len = sizeof buf;
475
- if (evma_get_peername (NUM2BSIG (signature), (struct sockaddr*)buf, &len)) {
476
- return rb_str_new (buf, len);
475
+ try {
476
+ if (evma_get_peername (NUM2BSIG (signature), (struct sockaddr*)buf, &len)) {
477
+ return rb_str_new (buf, len);
478
+ }
479
+ } catch (std::runtime_error e) {
480
+ rb_raise (rb_eRuntimeError, "%s", e.what());
477
481
  }
478
482
 
479
483
  return Qnil;
@@ -487,8 +491,12 @@ static VALUE t_get_sockname (VALUE self UNUSED, VALUE signature)
487
491
  {
488
492
  char buf[1024];
489
493
  socklen_t len = sizeof buf;
490
- if (evma_get_sockname (NUM2BSIG (signature), (struct sockaddr*)buf, &len)) {
491
- return rb_str_new (buf, len);
494
+ try {
495
+ if (evma_get_sockname (NUM2BSIG (signature), (struct sockaddr*)buf, &len)) {
496
+ return rb_str_new (buf, len);
497
+ }
498
+ } catch (std::runtime_error e) {
499
+ rb_raise (rb_eRuntimeError, "%s", e.what());
492
500
  }
493
501
 
494
502
  return Qnil;
@@ -534,7 +542,7 @@ static VALUE t_get_subprocess_status (VALUE self UNUSED, VALUE signature)
534
542
  rb_iv_set(proc_status, "@status", INT2FIX(WEXITSTATUS(status)));
535
543
  } else if (WIFSIGNALED(status)) {
536
544
  rb_iv_set(proc_status, "@termsig", INT2FIX(WTERMSIG(status)));
537
- } else if (WIFSTOPPED(status)){
545
+ } else if (WIFSTOPPED(status)) {
538
546
  rb_iv_set(proc_status, "@stopsig", INT2FIX(WSTOPSIG(status)));
539
547
  }
540
548
  #endif
@@ -1158,15 +1166,11 @@ t_stopping
1158
1166
 
1159
1167
  static VALUE t_stopping ()
1160
1168
  {
1161
- if (evma_stopping())
1162
- {
1163
- return Qtrue;
1164
- }
1165
- else
1166
- {
1167
- return Qfalse;
1168
- }
1169
-
1169
+ if (evma_stopping()) {
1170
+ return Qtrue;
1171
+ } else {
1172
+ return Qfalse;
1173
+ }
1170
1174
  }
1171
1175
 
1172
1176
 
@@ -1490,7 +1494,7 @@ extern "C" void Init_rubyeventmachine()
1490
1494
  rb_define_const (EmModule, "ConnectionNotifyReadable", INT2NUM(EM_CONNECTION_NOTIFY_READABLE));
1491
1495
  rb_define_const (EmModule, "ConnectionNotifyWritable", INT2NUM(EM_CONNECTION_NOTIFY_WRITABLE));
1492
1496
  rb_define_const (EmModule, "SslHandshakeCompleted", INT2NUM(EM_SSL_HANDSHAKE_COMPLETED ));
1493
- // EM_SSL_VERIFY = 109,
1497
+ rb_define_const (EmModule, "SslVerify", INT2NUM(EM_SSL_VERIFY ));
1494
1498
  // EM_PROXY_TARGET_UNBOUND = 110,
1495
1499
  // EM_PROXY_COMPLETED = 111
1496
1500