… | |
… | |
3935 | way (note also that glib is the slowest event library known to man). |
3935 | way (note also that glib is the slowest event library known to man). |
3936 | |
3936 | |
3937 | There is no supported compilation method available on windows except |
3937 | There is no supported compilation method available on windows except |
3938 | embedding it into other applications. |
3938 | embedding it into other applications. |
3939 | |
3939 | |
|
|
3940 | Sensible signal handling is officially unsupported by Microsoft - libev |
|
|
3941 | tries its best, but under most conditions, signals will simply not work. |
|
|
3942 | |
3940 | Not a libev limitation but worth mentioning: windows apparently doesn't |
3943 | Not a libev limitation but worth mentioning: windows apparently doesn't |
3941 | accept large writes: instead of resulting in a partial write, windows will |
3944 | accept large writes: instead of resulting in a partial write, windows will |
3942 | either accept everything or return C<ENOBUFS> if the buffer is too large, |
3945 | either accept everything or return C<ENOBUFS> if the buffer is too large, |
3943 | so make sure you only write small amounts into your sockets (less than a |
3946 | so make sure you only write small amounts into your sockets (less than a |
3944 | megabyte seems safe, but this apparently depends on the amount of memory |
3947 | megabyte seems safe, but this apparently depends on the amount of memory |
… | |
… | |
3948 | the abysmal performance of winsockets, using a large number of sockets |
3951 | the abysmal performance of winsockets, using a large number of sockets |
3949 | is not recommended (and not reasonable). If your program needs to use |
3952 | is not recommended (and not reasonable). If your program needs to use |
3950 | more than a hundred or so sockets, then likely it needs to use a totally |
3953 | more than a hundred or so sockets, then likely it needs to use a totally |
3951 | different implementation for windows, as libev offers the POSIX readiness |
3954 | different implementation for windows, as libev offers the POSIX readiness |
3952 | notification model, which cannot be implemented efficiently on windows |
3955 | notification model, which cannot be implemented efficiently on windows |
3953 | (Microsoft monopoly games). |
3956 | (due to Microsoft monopoly games). |
3954 | |
3957 | |
3955 | A typical way to use libev under windows is to embed it (see the embedding |
3958 | A typical way to use libev under windows is to embed it (see the embedding |
3956 | section for details) and use the following F<evwrap.h> header file instead |
3959 | section for details) and use the following F<evwrap.h> header file instead |
3957 | of F<ev.h>: |
3960 | of F<ev.h>: |
3958 | |
3961 | |
… | |
… | |
3994 | |
3997 | |
3995 | Early versions of winsocket's select only supported waiting for a maximum |
3998 | Early versions of winsocket's select only supported waiting for a maximum |
3996 | of C<64> handles (probably owning to the fact that all windows kernels |
3999 | of C<64> handles (probably owning to the fact that all windows kernels |
3997 | can only wait for C<64> things at the same time internally; Microsoft |
4000 | can only wait for C<64> things at the same time internally; Microsoft |
3998 | recommends spawning a chain of threads and wait for 63 handles and the |
4001 | recommends spawning a chain of threads and wait for 63 handles and the |
3999 | previous thread in each. Great). |
4002 | previous thread in each. Sounds great!). |
4000 | |
4003 | |
4001 | Newer versions support more handles, but you need to define C<FD_SETSIZE> |
4004 | Newer versions support more handles, but you need to define C<FD_SETSIZE> |
4002 | to some high number (e.g. C<2048>) before compiling the winsocket select |
4005 | to some high number (e.g. C<2048>) before compiling the winsocket select |
4003 | call (which might be in libev or elsewhere, for example, perl does its own |
4006 | call (which might be in libev or elsewhere, for example, perl and many |
4004 | select emulation on windows). |
4007 | other interpreters do their own select emulation on windows). |
4005 | |
4008 | |
4006 | Another limit is the number of file descriptors in the Microsoft runtime |
4009 | Another limit is the number of file descriptors in the Microsoft runtime |
4007 | libraries, which by default is C<64> (there must be a hidden I<64> fetish |
4010 | libraries, which by default is C<64> (there must be a hidden I<64> |
4008 | or something like this inside Microsoft). You can increase this by calling |
4011 | fetish or something like this inside Microsoft). You can increase this |
4009 | C<_setmaxstdio>, which can increase this limit to C<2048> (another |
4012 | by calling C<_setmaxstdio>, which can increase this limit to C<2048> |
4010 | arbitrary limit), but is broken in many versions of the Microsoft runtime |
4013 | (another arbitrary limit), but is broken in many versions of the Microsoft |
4011 | libraries. |
|
|
4012 | |
|
|
4013 | This might get you to about C<512> or C<2048> sockets (depending on |
4014 | runtime libraries. This might get you to about C<512> or C<2048> sockets |
4014 | windows version and/or the phase of the moon). To get more, you need to |
4015 | (depending on windows version and/or the phase of the moon). To get more, |
4015 | wrap all I/O functions and provide your own fd management, but the cost of |
4016 | you need to wrap all I/O functions and provide your own fd management, but |
4016 | calling select (O(n²)) will likely make this unworkable. |
4017 | the cost of calling select (O(n²)) will likely make this unworkable. |
4017 | |
4018 | |
4018 | =back |
4019 | =back |
4019 | |
4020 | |
4020 | =head2 PORTABILITY REQUIREMENTS |
4021 | =head2 PORTABILITY REQUIREMENTS |
4021 | |
4022 | |