Commit Graph

48 Commits

Author SHA1 Message Date
Eugene Kabanov 0d050d5823
Add automatic constructors for TCP and UDP transports. (#512)
* Add automatic constructors for TCP and UDP transports.

* Add port number argument.
Add some documentation comments.
Fix tests.

* Make datagram test use request/response scheme.

* Add helper.

* Fix issue with non-zero port setups.
Add test.

* Fix tests to probe ports.

* Attempt to fix MacOS issue.

* Add Opt[IpAddress].
Make IPv4 mapping to IPv6 space automatic.

* Add tests.

* Add stream capabilities.

* Fix Linux issues.

* Make getTransportFlags() available for all OSes.

* Fix one more compilation issue.

* Workaround weird compiler bug.

* Fix forgotten typed version of constructor.

* Make single source for addresses calculation.

* Add one more check into tests.

* Fix flags not being set in transport constructor.

* Fix post-rebase issues with flags not being set.

* Address review comments.
2024-04-13 03:04:42 +03:00
Jacek Sieka 1021a7d294
check leaks after every test (#487) 2024-01-18 14:34:16 +02:00
Jacek Sieka f5ff9e32ca
introduce asyncraises in transports/asyncsync (#470)
With these fixes, `transports`/`asyncsync` correctly propagate and document their raises information - generally, most transport functions (send etc) raise `TransportError` and `CancelledError` - `closeWait` is special in that it generally doesn't fail.

This PR introduces the syntax `Future[void].Raises([types])` to create the `InternalRaisesFuture` type with the correct encoding for the types - this allows it to be used in user code while retaining the possibility to change the internal representation down the line.

* introduce raising constraints on stream callbacks - these constraints now give a warning when called with a callback that can raise exceptions (raising callbacks would crash 
* fix fail and its tests, which wasn't always given a good generic match
* work around nim bugs related to macro expansion of generic types
* make sure transports raise only `TransportError`-derived exceptions (and `CancelledError`)
2023-11-15 09:38:48 +01:00
Eugene Kabanov 9c93ab48de
Attempt to fix CI crash at Windows. (#465)
* Attempt to fix CI crash at Windows.
Remove all cast[string] and cast[seq[byte]] from the codebase.

* Address review comments.
2023-11-13 13:14:21 +02:00
Eugene Kabanov a70b145964
IPv4/IPv6 dualstack (#456)
* Initial commit.

* Fix tests.

* Fix linux compilation issue.

* Add getDomain() implementation.
Add getDomain() tests.
Add datagram tests.

* Fix style errors.

* Deprecate NetFlag.
Deprecate new flags in ServerFlags.
Add isAvailable().
Fix setDualstack() to ignore errors on `Auto`.
Updatetests.

* Deprecate some old procedures.
Improve datagram transport a bit.

* Address review comments, and fix tests.

* Fix setDescriptorBlocking() issue.
Recover connect() dualstack behavior.
Add test for connect() IPv6-[IPv4 mapped] addresses.

* Fix alignment code issue.
Fix TcpNoDelay was not available on Windows.

* Add dualstack support to HTTP/HTTPS client/server.
2023-10-30 15:27:50 +02:00
Eugene Kabanov 155d89450e
Trackers refactoring. (#416)
* Refactor chronos trackers to be more simple.

* Refactor trackers.
Add HTTP server trackers.
Refactor HTTP main processing loop.

* Compatibility fixes.
Add checkLeaks().

* Fix posix test issue.

* Add httpdebug module which introduces HTTP connection dumping helpers.
Add tests for it.

* Recover and deprecate old version of Trackers.

* Make public iterators to iterate over all tracker counters available.
Fix asynctests to use public iterators instead private one.
2023-07-14 13:35:08 +03:00
Jacek Sieka a6ac5f2213
exception warning fixes (#403) 2023-06-05 13:03:38 +02:00
Jacek Sieka 229de5f842
Compile-time configuration (#371)
This PR moves all compile-time configuration to a single module,
simplifying documentation and access to these features.

Upcomfing features may be enabled either individually, or through a new
`chronosPreviewV4` catch-all designed to allow code to be prepared for
increased strictness in future chronos releases.

`-d:chronosDebug` may be used to enable the existing debugging helpers
together.
2023-03-31 07:35:04 +02:00
Eugene Kabanov d270dba8a3
Fix unused warnings, result, asyncCheck and 80 cpl (#185)
* Fix sources to follow 80 characters per line.
Fix unused compilation warnings.
Refactor (remove result) handles.nim.
Fix tests to use asyncSpawn instead of asyncCheck.

* Fix handles for Unix platforms.
2021-05-07 23:52:24 +03:00
Jacek Sieka 4abd7a5645
exception tracking (#166)
* exception tracking

This PR adds minimal exception tracking to chronos, moving the goalpost
one step further.

In particular, it becomes invalid to raise exceptions from `callSoon`
callbacks: this is critical for writing correct error handling because
there's no reasonable way that a user of chronos can possibly _reason_
about exceptions coming out of there: the event loop will be in an
indeterminite state when the loop is executing an _random_ callback.

As expected, there are several issues in the error handling of chronos:
in particular, it will end up in an inconsistent internal state whenever
the selector loop operations fail, because the internal state update
functions are not written in an exception-safe way. This PR turns this
into a Defect, which probably is not the optimal way of handling things
- expect more work to be done here.

Some API have no way of reporting back errors to callers - for example,
when something fails in the accept loop, there's not much it can do, and
no way to report it back to the user of the API - this has been fixed
with the new accept flow - the old one should be deprecated.

Finally, there is information loss in the API: in composite operations
like `poll` and `waitFor` there's no way to differentiate internal
errors from user-level errors originating from callbacks.

* store `CatchableError` in future
* annotate proc's with correct raises information
* `selectors2` to avoid non-CatchableError IOSelectorsException
* `$` should never raise
* remove unnecessary gcsafe annotations
* fix exceptions leaking out of timer waits
* fix some imports
* functions must signal raising the union of all exceptions across all
platforms to enable cross-platform code
* switch to unittest2
* add `selectors2` which supercedes the std library version and fixes
several exception handling issues in there

* fixes

* docs, platform-independent eh specifiers for some functions

* add feature flag for strict exception mode

also bump version to 3.0.0 - _most_ existing code should be compatible
with this version of exception handling but some things might need
fixing - callbacks, existing raises specifications etc.

* fix AsyncCheck for non-void T
2021-03-24 10:08:33 +01:00
cheatfate 64583b4269
Fix Windows datagram's AnyAddress issue.
Add test for datagram's AnyAddress.
Bump version to 2.3.6.
2020-02-25 23:50:39 +02:00
cheatfate e34857364e
Attempt to fix #64. 2020-01-28 12:47:38 +02:00
cheatfate fb00b20cfa
Fix all compilation warnings for 1.0.2.
Fix all related problems.
2019-10-29 23:19:41 +02:00
cheatfate 29d9274e03
Fix some compilation warnings. 2019-10-24 16:01:57 +03:00
cheatfate 2c2e2f7fad
Add getInterfaces() and getBestRoute().
Add IpNet and IpMask.
Add TTL setting for UDP transports with {Broadcast}.
Fix comments.
Add tests.
Bump version to 2.2.5.
2019-04-15 04:27:12 +03:00
cheatfate 6a1f7785a0
Custom tracking mechanism.
1. Add simple tracking of Datagram and Stream transports.
2. Fix leaks in tests.
3. Add leaks tests to Datagram and Stream transport tests.
2019-04-04 12:34:23 +03:00
cheatfate d3b72dbe8b
Add broadcast feature for DatagramTransport.
Add test for it.
2019-03-31 09:18:21 +03:00
cheatfate 80ee289847
Fix rarely appearing Windows bug with close(transport).
Add tests for it.
Add fromProc for all Future[T] in transports.
Add testall to improve tests speed.
Bump version to 2.2.4.
2019-03-31 00:31:10 +02:00
Eugene Kabanov 67e214c5df Introduce monotonic timer functions. (#24)
* Introduce monotonic timer functions.
Old fast timers are available through compiler switch.
Add tests for both timers.
* Bump version to 2.2.2.
2019-03-24 10:57:36 -06:00
Mamy Ratsimbazafy 9f15c6b752
Rebrand Asyncdispatch2 to Chronos [WIP] (#20)
* Update file headers, copyright date

* Rename files and hopefully fix nimble

* Forgot to change path in tests

* Update readme
2019-02-06 15:49:11 +01:00
cheatfate 6b009b26ef Lower number of tests for 64bit platform. 2018-11-07 22:57:54 +02:00
cheatfate e5e710854f Removal of commented code. 2018-10-28 07:55:18 +02:00
cheatfate 56537311af Decrease number of tests. 2018-10-27 21:22:56 +03:00
cheatfate 2bc3932ae2 One more attempt to fix freezing test. 2018-10-27 20:49:36 +03:00
cheatfate 14dd1e9a8e Fix datagram test from freezing. 2018-10-27 19:17:37 +03:00
cheatfate 4df91648e3 Attempt to fix Appveyor stuck bug. 2018-10-27 17:57:41 +03:00
cheatfate 8a68c66caa Fix datagram problems. 2018-10-25 18:18:36 +03:00
cheatfate 3859aab5c6 Fix race condition, when close transport happens while writing queue is not empty. 2018-10-02 13:50:14 +03:00
cheatfate 530905f276 Fix #8 and related issues, added more tests for it.
Fix Unix connection failed bug.
2018-08-24 15:20:08 +03:00
cheatfate 2e1f45a472 Attempt to fix stuck test on 32bit Windows. 2018-07-31 13:01:51 +03:00
cheatfate 0ca2cd8e5c Fix GC issues with sending, according to latest Nim changes.
Changed datagram.nim API to allow sending parts of strings and seqs.
2018-06-15 13:54:26 +03:00
cheatfate a0c724e9d8 Fix Windows/Unix behavior on datagram CONNRESET.
Add test for CONNRESET
2018-06-15 03:28:02 +03:00
cheatfate 525aaf6837 Comment out asyncmacro2 skipStmtList().
Many changes in datagram.nim.
Fixed testdatagram.nim.
Fixed testserver.nim.
2018-06-14 09:49:59 +03:00
cheatfate 3842120217 Temporary disable DatagramServer test. 2018-06-07 19:06:41 +03:00
cheatfate b8e8d96f3b Fix datagram: for send/sendTo (string, seq[T]) versions.
Fix stream: for write (string, seq[T]) versions
More tests for both datagram/stream.
2018-06-05 23:21:07 +03:00
cheatfate 2e6697d0d7 Disable DatagramServer test. 2018-06-05 11:44:56 +03:00
cheatfate 6f8be9f067 Attempt to fix datagram bug. 2018-06-05 11:31:18 +03:00
cheatfate 960b675d62 Changed TransportAddress API.
Introduced resolveTAddress().
Added TransportAddress tests.
2018-06-02 17:25:26 +03:00
cheatfate 6985626e1c Test teststream2 renamed to testserver.
Fix compilation errors.
2018-05-31 11:10:32 +03:00
cheatfate 027e7c02a9 Added DatagramServer.
Changed StreamServer API a bit.
Added test for DatagramServer.
2018-05-31 11:03:58 +03:00
cheatfate 3fb9a91cbe Investigated Transport close bug and fixed it.
Removed old integrated tests and hexdump
Removed trailing whitespaces.
2018-05-29 12:59:39 +03:00
cheatfate d28e4d0c49 Enable all tests.
Adding more iterations for UDP stream test.
Fixed bugs in TCP stream.
2018-05-22 18:21:58 +03:00
Your Name 23a81b6492 Refactoring, more tests. 2018-05-22 00:52:57 +03:00
Your Name 5c6c723cb9 Fix nasty GC misuse bug 2018-05-18 02:40:42 +03:00
Your Name 570467a306 Attempts to fix #01 2018-05-17 11:45:18 +03:00
cheatfate 868ae64ae0 Fix compilation warning at asyncfutures2.nim
Add spawn procedure
Add usage of spawn procedure in datagram.nim
Some fixes at stream.nim
Increase number of clients in testdatagram.nim
2018-05-16 18:28:23 +03:00
cheatfate bb36fc98a4 Fix [SYSASSERT] genericResetAux on Windows part. 2018-05-16 15:29:19 +03:00
cheatfate 4d144753ee Initial commit 2018-05-16 11:22:34 +03:00