eventmachine 1.2.0.1-x64-mingw32 → 1.2.1-x64-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb869eae0c52751e41fda40eda706564dba93279
4
- data.tar.gz: 4d9e2395ee5a3398dd895826b9e31d6250c35b91
3
+ metadata.gz: 4ef797511a403ea13089c8e505a5394705138c55
4
+ data.tar.gz: 3d040218c0909e57e36e2c4343860b9c899e057b
5
5
  SHA512:
6
- metadata.gz: e6b32f5ff6d060681ebd28a3a519357bac2aab927c57eba3c747e8f23e83ff7f9b1ae13320dcb303ce3a5257c279705fee9cc05a768af0f223f7783b509cce39
7
- data.tar.gz: a2763ebff49d53364b9267fbaa0b527929c9d523dc798b7d8abdc297cdafea1da189ca3757d39177c85a81bc785dbf1a6298e76d2918fb10a406e54896da1643
6
+ metadata.gz: c47293c982979b53e7cf6fd1f0afea0f1ba1497a30aa7ed96a920cc9a7d3703e5a696aaf1a6340d09c451d0f7d5fea0a95a35065bd924c9d89a3ca4594b887ac
7
+ data.tar.gz: 2f347642fdd0f183f56c0c4b279978b1c84fd4c7a2b4d7451024ebb60575efa704f3db9bc98755dca787324da4e72d07ffa6a22528d2ad14257c80b2cbbec5a8
@@ -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();
@@ -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