eventmachine 0.7.0 → 0.7.2

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.
Files changed (53) hide show
  1. data/COPYING +44 -265
  2. data/GNU +281 -0
  3. data/LEGAL +25 -0
  4. data/README +5 -3
  5. data/RELEASE_NOTES +7 -2
  6. data/ext/binder.cpp +8 -15
  7. data/ext/binder.h +8 -15
  8. data/ext/cmain.cpp +29 -15
  9. data/ext/ed.cpp +36 -43
  10. data/ext/ed.h +8 -15
  11. data/ext/em.cpp +116 -21
  12. data/ext/em.h +11 -16
  13. data/ext/emwin.cpp +9 -16
  14. data/ext/emwin.h +9 -16
  15. data/ext/eventmachine.h +9 -14
  16. data/ext/extconf.rb +9 -17
  17. data/ext/files.cpp +7 -14
  18. data/ext/files.h +7 -14
  19. data/ext/page.cpp +8 -15
  20. data/ext/page.h +8 -15
  21. data/ext/project.h +15 -15
  22. data/ext/rubymain.cpp +37 -16
  23. data/ext/sigs.cpp +8 -15
  24. data/ext/sigs.h +8 -15
  25. data/ext/ssl.cpp +8 -15
  26. data/ext/ssl.h +8 -15
  27. data/lib/em/deferrable.rb +40 -27
  28. data/lib/em/eventable.rb +12 -23
  29. data/lib/em/future.rb +62 -0
  30. data/lib/eventmachine.rb +156 -66
  31. data/lib/eventmachine_version.rb +12 -23
  32. data/lib/evma.rb +15 -18
  33. data/lib/evma/callback.rb +16 -19
  34. data/lib/evma/container.rb +17 -19
  35. data/lib/evma/factory.rb +16 -19
  36. data/lib/evma/protocol.rb +17 -19
  37. data/lib/evma/reactor.rb +17 -19
  38. data/lib/pr_eventmachine.rb +12 -23
  39. data/lib/protocols/buftok.rb +121 -0
  40. data/lib/protocols/header_and_content.rb +12 -23
  41. data/lib/protocols/httpclient.rb +44 -31
  42. data/lib/protocols/line_and_text.rb +97 -118
  43. data/lib/protocols/tcptest.rb +12 -22
  44. data/tests/test_basic.rb +14 -24
  45. data/tests/test_eventables.rb +14 -24
  46. data/tests/test_exc.rb +57 -0
  47. data/tests/test_futures.rb +136 -0
  48. data/tests/test_hc.rb +14 -24
  49. data/tests/test_httpclient.rb +106 -25
  50. data/tests/test_ltp.rb +14 -23
  51. data/tests/test_timers.rb +109 -0
  52. data/tests/test_ud.rb +14 -24
  53. metadata +11 -2
data/LEGAL ADDED
@@ -0,0 +1,25 @@
1
+ LEGAL NOTICE INFORMATION
2
+ ------------------------
3
+
4
+ EventMachine is Copyright (C) 2006-07 by Francis Cianfrocca.
5
+
6
+ EventMachine is copyrighted software owned by Francis Cianfrocca
7
+ (blackhedd ... gmail.com). You may redistribute and/or modify this
8
+ software as long as you comply with either the terms of the GPL
9
+ (see the file GPL), or Ruby's license (see the file COPYING).
10
+
11
+ Your use of all the files in this distribution is controlled by these
12
+ license terms, except for those files specifically mentioned below:
13
+
14
+
15
+
16
+ setup.rb
17
+ This file is Copyright (C) 2000-2005 by Minero Aoki
18
+ You can distribute/modify this file under the terms of
19
+ the GNU LGPL, Lesser General Public License version 2.1.
20
+
21
+
22
+ lib/protocols/buftok.rb
23
+ This file is Copyright (C) 2007 by Tony Arcieri. This file is
24
+ covered by the terms of Ruby's License (see the file COPYING).
25
+
data/README CHANGED
@@ -1,12 +1,14 @@
1
- $Id: README 47 2006-05-15 21:42:38Z blackhedd $
1
+ $Id: README 317 2007-05-22 21:55:43Z blackhedd $
2
2
 
3
3
  = RUBY/EventMachine
4
4
 
5
5
  Homepage:: http://rubyeventmachine.com
6
- Copyright:: (C) 2006 by Francis Cianfrocca. All Rights Reserved.
6
+ Copyright:: (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
7
7
  Email:: gmail address: garbagecat10
8
8
 
9
- This program is made available under the terms of the Lesser-GPL version 2.
9
+ EventMachine is copyrighted free software made available under the terms
10
+ of either the GPL or Ruby's License. See the file COPYING for full licensing
11
+ information.
10
12
  See EventMachine and EventMachine::Connection for documentation and
11
13
  usage examples.
12
14
 
@@ -1,9 +1,14 @@
1
- $Id: RELEASE_NOTES 223 2006-08-08 20:30:41Z blackhedd $
1
+ $Id: RELEASE_NOTES 286 2006-11-28 03:18:18Z blackhedd $
2
2
 
3
3
  RUBY/EventMachine RELEASE NOTES
4
4
 
5
5
  --------------------------------------------------
6
- Version: 0.7.0, released xxAug06
6
+ Version: 0.7.1, released xxNov06
7
+ Added protocol handlers for line-oriented protocols.
8
+ Various bug fixes.
9
+
10
+ --------------------------------------------------
11
+ Version: 0.7.0, released 20Nov06
7
12
  Added a fix in em.cpp/ConnectToServer to fix a fatal exception that
8
13
  occurred in FreeBSD when connecting successfully to a remote server.
9
14
 
@@ -1,26 +1,19 @@
1
1
  /*****************************************************************************
2
2
 
3
- $Id: binder.cpp 47 2006-05-15 21:42:38Z blackhedd $
3
+ $Id: binder.cpp 318 2007-05-22 22:06:24Z blackhedd $
4
4
 
5
5
  File: binder.cpp
6
6
  Date: 07Apr06
7
7
 
8
- Copyright (C) 2006 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: garbagecat20
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
10
 
11
11
  This program is free software; you can redistribute it and/or modify
12
- it under the terms of the GNU General Public License as published by
13
- the Free Software Foundation; either version 2 of the License, or
14
- (at your option) any later version.
15
-
16
- This program is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU General Public License for more details.
20
-
21
- You should have received a copy of the GNU General Public License
22
- along with this program; if not, write to the Free Software
23
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
+
16
+ See the file COPYING for complete licensing information.
24
17
 
25
18
  *****************************************************************************/
26
19
 
@@ -1,26 +1,19 @@
1
1
  /*****************************************************************************
2
2
 
3
- $Id: binder.h 61 2006-05-17 04:58:31Z blackhedd $
3
+ $Id: binder.h 318 2007-05-22 22:06:24Z blackhedd $
4
4
 
5
5
  File: binder.h
6
6
  Date: 07Apr06
7
7
 
8
- Copyright (C) 2006 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: garbagecat20
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
10
 
11
11
  This program is free software; you can redistribute it and/or modify
12
- it under the terms of the GNU General Public License as published by
13
- the Free Software Foundation; either version 2 of the License, or
14
- (at your option) any later version.
15
-
16
- This program is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU General Public License for more details.
20
-
21
- You should have received a copy of the GNU General Public License
22
- along with this program; if not, write to the Free Software
23
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
+
16
+ See the file COPYING for complete licensing information.
24
17
 
25
18
  *****************************************************************************/
26
19
 
@@ -1,26 +1,19 @@
1
1
  /*****************************************************************************
2
2
 
3
- $Id: cmain.cpp 265 2006-10-05 19:07:45Z blackhedd $
3
+ $Id: cmain.cpp 318 2007-05-22 22:06:24Z blackhedd $
4
4
 
5
- File: libmain.cpp
5
+ File: cmain.cpp
6
6
  Date: 06Apr06
7
7
 
8
- Copyright (C) 2006 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: garbagecat20
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
10
 
11
11
  This program is free software; you can redistribute it and/or modify
12
- it under the terms of the GNU General Public License as published by
13
- the Free Software Foundation; either version 2 of the License, or
14
- (at your option) any later version.
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
15
 
16
- This program is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU General Public License for more details.
20
-
21
- You should have received a copy of the GNU General Public License
22
- along with this program; if not, write to the Free Software
23
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16
+ See the file COPYING for complete licensing information.
24
17
 
25
18
  *****************************************************************************/
26
19
 
@@ -93,6 +86,17 @@ extern "C" const char *evma_connect_to_server (const char *server, int port)
93
86
  return EventMachine->ConnectToServer (server, port);
94
87
  }
95
88
 
89
+ /***************************
90
+ evma_connect_to_unix_server
91
+ ***************************/
92
+
93
+ extern "C" const char *evma_connect_to_unix_server (const char *server)
94
+ {
95
+ if (!EventMachine)
96
+ throw std::runtime_error ("not initialized");
97
+ return EventMachine->ConnectToUnixServer (server);
98
+ }
99
+
96
100
 
97
101
  /**********************
98
102
  evma_create_tcp_server
@@ -276,3 +280,13 @@ extern "C" void evma_set_timer_quantum (int interval)
276
280
  EventMachine->SetTimerQuantum (interval);
277
281
  }
278
282
 
283
+ /******************
284
+ evma_setuid_string
285
+ ******************/
286
+
287
+ extern "C" void evma_setuid_string (const char *username)
288
+ {
289
+ // We do NOT need to be running an EM instance because this method is static.
290
+ EventMachine_t::SetuidString (username);
291
+ }
292
+
data/ext/ed.cpp CHANGED
@@ -1,26 +1,19 @@
1
1
  /*****************************************************************************
2
2
 
3
- $Id: ed.cpp 255 2006-09-15 11:21:15Z blackhedd $
3
+ $Id: ed.cpp 318 2007-05-22 22:06:24Z blackhedd $
4
4
 
5
5
  File: ed.cpp
6
6
  Date: 06Apr06
7
7
 
8
- Copyright (C) 2006 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: garbagecat20
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
10
 
11
11
  This program is free software; you can redistribute it and/or modify
12
- it under the terms of the GNU General Public License as published by
13
- the Free Software Foundation; either version 2 of the License, or
14
- (at your option) any later version.
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
15
 
16
- This program is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU General Public License for more details.
20
-
21
- You should have received a copy of the GNU General Public License
22
- along with this program; if not, write to the Free Software
23
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16
+ See the file COPYING for complete licensing information.
24
17
 
25
18
  *****************************************************************************/
26
19
 
@@ -51,37 +44,37 @@ EventableDescriptor::EventableDescriptor
51
44
  ****************************************/
52
45
 
53
46
  EventableDescriptor::EventableDescriptor (int sd):
54
- EventCallback (NULL),
55
- LastRead (0),
56
- LastWritten (0),
57
- MySocket (sd),
58
- bCloseNow (false),
59
- bCloseAfterWriting (false)
47
+ EventCallback (NULL),
48
+ LastRead (0),
49
+ LastWritten (0),
50
+ MySocket (sd),
51
+ bCloseNow (false),
52
+ bCloseAfterWriting (false)
60
53
  {
61
- /* There are three ways to close a socket, all of which should
62
- * automatically signal to the event machine that this object
63
- * should be removed from the polling scheduler.
64
- * First is a hard close, intended for bad errors or possible
65
- * security violations. It immediately closes the connection
66
- * and puts this object into an error state.
67
- * Second is to set bCloseNow, which will cause the event machine
68
- * to delete this object (and thus close the connection in our
69
- * destructor) the next chance it gets. bCloseNow also inhibits
70
- * the writing of new data on the socket (but not necessarily
71
- * the reading of new data).
72
- * The third way is to set bCloseAfterWriting, which inhibits
73
- * the writing of new data and converts to bCloseNow as soon
74
- * as everything in the outbound queue has been written.
75
- * bCloseAfterWriting is really for use only by protocol handlers
76
- * (for example, HTTP writes an HTML page and then closes the
77
- * connection). All of the error states we generate internally
78
- * cause an immediate close to be scheduled, which may have the
79
- * effect of discarding outbound data.
80
- */
54
+ /* There are three ways to close a socket, all of which should
55
+ * automatically signal to the event machine that this object
56
+ * should be removed from the polling scheduler.
57
+ * First is a hard close, intended for bad errors or possible
58
+ * security violations. It immediately closes the connection
59
+ * and puts this object into an error state.
60
+ * Second is to set bCloseNow, which will cause the event machine
61
+ * to delete this object (and thus close the connection in our
62
+ * destructor) the next chance it gets. bCloseNow also inhibits
63
+ * the writing of new data on the socket (but not necessarily
64
+ * the reading of new data).
65
+ * The third way is to set bCloseAfterWriting, which inhibits
66
+ * the writing of new data and converts to bCloseNow as soon
67
+ * as everything in the outbound queue has been written.
68
+ * bCloseAfterWriting is really for use only by protocol handlers
69
+ * (for example, HTTP writes an HTML page and then closes the
70
+ * connection). All of the error states we generate internally
71
+ * cause an immediate close to be scheduled, which may have the
72
+ * effect of discarding outbound data.
73
+ */
81
74
 
82
- if (sd == INVALID_SOCKET)
83
- throw std::runtime_error ("bad eventable descriptor");
84
- CreatedAt = gCurrentLoopTime;
75
+ if (sd == INVALID_SOCKET)
76
+ throw std::runtime_error ("bad eventable descriptor");
77
+ CreatedAt = gCurrentLoopTime;
85
78
  }
86
79
 
87
80
 
data/ext/ed.h CHANGED
@@ -1,26 +1,19 @@
1
1
  /*****************************************************************************
2
2
 
3
- $Id: ed.h 254 2006-09-15 11:17:01Z blackhedd $
3
+ $Id: ed.h 318 2007-05-22 22:06:24Z blackhedd $
4
4
 
5
5
  File: ed.h
6
6
  Date: 06Apr06
7
7
 
8
- Copyright (C) 2006 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: garbagecat20
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
10
 
11
11
  This program is free software; you can redistribute it and/or modify
12
- it under the terms of the GNU General Public License as published by
13
- the Free Software Foundation; either version 2 of the License, or
14
- (at your option) any later version.
15
-
16
- This program is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU General Public License for more details.
20
-
21
- You should have received a copy of the GNU General Public License
22
- along with this program; if not, write to the Free Software
23
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
+
16
+ See the file COPYING for complete licensing information.
24
17
 
25
18
  *****************************************************************************/
26
19
 
data/ext/em.cpp CHANGED
@@ -1,26 +1,19 @@
1
1
  /*****************************************************************************
2
2
 
3
- $Id: em.cpp 267 2006-10-25 02:02:02Z blackhedd $
3
+ $Id: em.cpp 318 2007-05-22 22:06:24Z blackhedd $
4
4
 
5
- File: ed.cpp
5
+ File: em.cpp
6
6
  Date: 06Apr06
7
7
 
8
- Copyright (C) 2006 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: garbagecat10
8
+ Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
+ Gmail: blackhedd
10
10
 
11
11
  This program is free software; you can redistribute it and/or modify
12
- it under the terms of the GNU General Public License as published by
13
- the Free Software Foundation; either version 2 of the License, or
14
- (at your option) any later version.
12
+ it under the terms of either: 1) the GNU General Public License
13
+ as published by the Free Software Foundation; either version 2 of the
14
+ License, or (at your option) any later version; or 2) Ruby's License.
15
15
 
16
- This program is distributed in the hope that it will be useful,
17
- but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- GNU General Public License for more details.
20
-
21
- You should have received a copy of the GNU General Public License
22
- along with this program; if not, write to the Free Software
23
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16
+ See the file COPYING for complete licensing information.
24
17
 
25
18
  *****************************************************************************/
26
19
 
@@ -125,6 +118,35 @@ void EventMachine_t::SetTimerQuantum (int interval)
125
118
  }
126
119
 
127
120
 
121
+ /*************************************
122
+ (STATIC) EventMachine_t::SetuidString
123
+ *************************************/
124
+
125
+ void EventMachine_t::SetuidString (const char *username)
126
+ {
127
+ /* This method takes a caller-supplied username and tries to setuid
128
+ * to that user. There is no meaningful implementation (and no error)
129
+ * on Windows. On Unix, a failure to setuid the caller-supplied string
130
+ * causes a fatal abort, because presumably the program is calling us
131
+ * in order to fulfill a security requirement. If we fail silently,
132
+ * the user may continue to run with too much privilege.
133
+ */
134
+
135
+ #ifdef OS_UNIX
136
+ if (!username || !*username)
137
+ throw std::runtime_error ("setuid_string failed: no username specified");
138
+
139
+ struct passwd *p = getpwnam (username);
140
+ if (!p)
141
+ throw std::runtime_error ("setuid_string failed: unknown username");
142
+
143
+ if (setuid (p->pw_uid) != 0)
144
+ throw std::runtime_error ("setuid_string failed: no setuid");
145
+
146
+ // Success.
147
+ #endif
148
+ }
149
+
128
150
 
129
151
  /*********************************
130
152
  EventMachine_t::SignalLoopBreaker
@@ -234,7 +256,7 @@ bool EventMachine_t::_RunOnce()
234
256
  // if we know we're running on a 2.6 kernel.
235
257
  // epoll will be effective if we provide it as an alternative,
236
258
  // however it has the same problem interoperating with Ruby
237
- // threads that selct does.
259
+ // threads that select does.
238
260
 
239
261
  //cerr << "X";
240
262
 
@@ -617,6 +639,79 @@ const char *EventMachine_t::ConnectToServer (const char *server, int port)
617
639
  return out;
618
640
  }
619
641
 
642
+ /***********************************
643
+ EventMachine_t::ConnectToUnixServer
644
+ ***********************************/
645
+
646
+ const char *EventMachine_t::ConnectToUnixServer (const char *server)
647
+ {
648
+ /* Connect to a Unix-domain server, which by definition is running
649
+ * on the same host.
650
+ * There is no meaningful implementation on Windows.
651
+ * There's no need to do a nonblocking connect, since the connection
652
+ * is always local and can always be fulfilled immediately.
653
+ */
654
+
655
+ #ifdef OS_WIN32
656
+ throw std::runtime_error ("unix-domain connection unavailable on this platform");
657
+ return NULL;
658
+ #endif
659
+
660
+ // The whole rest of this function is only compiled on Unix systems.
661
+ #ifdef OS_UNIX
662
+
663
+ const char *out = NULL;
664
+
665
+ if (!server || !*server)
666
+ return NULL;
667
+
668
+ sockaddr_un pun;
669
+ memset (&pun, 0, sizeof(pun));
670
+ pun.sun_family = AF_LOCAL;
671
+
672
+ // You ordinarily expect the server name field to be at least 1024 bytes long,
673
+ // but on Linux it can be MUCH shorter.
674
+ if (strlen(server) >= sizeof(pun.sun_path))
675
+ throw std::runtime_error ("unix-domain server name is too long");
676
+
677
+
678
+ strcpy (pun.sun_path, server);
679
+
680
+ int fd = socket (AF_LOCAL, SOCK_STREAM, 0);
681
+ if (fd == INVALID_SOCKET)
682
+ return NULL;
683
+
684
+ // From here on, ALL error returns must close the socket.
685
+ // NOTE: At this point, the socket is still a blocking socket.
686
+ if (connect (fd, (struct sockaddr*)&pun, sizeof(pun)) != 0) {
687
+ closesocket (fd);
688
+ return NULL;
689
+ }
690
+
691
+ // Set the newly-connected socket nonblocking.
692
+ if (!SetSocketNonblocking (fd)) {
693
+ closesocket (fd);
694
+ return NULL;
695
+ }
696
+
697
+ // Set up a connection descriptor and add it to the event-machine.
698
+ // Observe, even though we know the connection status is connect-success,
699
+ // we still set the "pending" flag, so some needed initializations take
700
+ // place.
701
+ ConnectionDescriptor *cd = new ConnectionDescriptor (fd);
702
+ if (!cd)
703
+ throw std::runtime_error ("no connection allocated");
704
+ cd->SetConnectPending (true);
705
+ Add (cd);
706
+ out = cd->GetBinding().c_str();
707
+
708
+ if (out == NULL)
709
+ closesocket (fd);
710
+
711
+ return out;
712
+ #endif
713
+ }
714
+
620
715
 
621
716
  /*******************************
622
717
  EventMachine_t::CreateTcpServer
@@ -859,7 +954,7 @@ const char *EventMachine_t::CreateUnixDomainServer (const char *filename)
859
954
  #ifdef OS_UNIX
860
955
  const char *output_binding = NULL;
861
956
 
862
- struct sockaddr_un sun;
957
+ struct sockaddr_un s_sun;
863
958
 
864
959
  int sd_accept = socket (AF_LOCAL, SOCK_STREAM, 0);
865
960
  if (sd_accept == INVALID_SOCKET) {
@@ -870,9 +965,9 @@ const char *EventMachine_t::CreateUnixDomainServer (const char *filename)
870
965
  goto fail;
871
966
  unlink (filename);
872
967
 
873
- bzero (&sun, sizeof(sun));
874
- sun.sun_family = AF_LOCAL;
875
- strncpy (sun.sun_path, filename, sizeof(sun.sun_path)-1);
968
+ bzero (&s_sun, sizeof(s_sun));
969
+ s_sun.sun_family = AF_LOCAL;
970
+ strncpy (s_sun.sun_path, filename, sizeof(s_sun.sun_path)-1);
876
971
 
877
972
  // don't bother with reuseaddr for a local socket.
878
973
 
@@ -885,7 +980,7 @@ const char *EventMachine_t::CreateUnixDomainServer (const char *filename)
885
980
  #endif
886
981
  }
887
982
 
888
- if (bind (sd_accept, (struct sockaddr*)&sun, sizeof(sun))) {
983
+ if (bind (sd_accept, (struct sockaddr*)&s_sun, sizeof(s_sun))) {
889
984
  //__warning ("binding failed");
890
985
  goto fail;
891
986
  }