Adventures with \Device\Afd

I’ve been playing around with Rust recently and whilst investigating asynchronous programming in Rust I was looking at Tokio, an async runtime. From there I started looking at Mio, the cross-platform, low-level, I/O code that Tokio uses. For Windows platforms Mio uses wepoll, which is a Windows implementation of the Linux epoll API on Windows and is based on the code that is used by libuv for Node.js. This uses networking code that is NOT your standard high-performance Windows networking code using I/O completion ports and instead uses the ‘sparsely documented’ \Device\Afd interface that lies below the Winsock2 layer.

Practical Testing: 39 - 19 years' unit testing the same code

Back in 2004 I started a series of blog posts called “Practical Testing”, about unit testing a non-trivial piece of C++ code. The idea was to show how adding unit tests to existing, real-world, code could be useful and could support future development and refactoring. Episodes 1 though 13 were written in 2004 and covered getting the code under test and fixing some bugs that were complicated to reproduce in a live environment.

Asynchronous Events: Stability

It seems amazing but the last time we did a release of The Server Framework was in 2021. Since then the mainline development of the framework has been pretty stable with no new bug reports. Most of the time the code doesn’t need a new release to handle minor changes in compiler version and often it’s easy enough for client’s to do these changes themselves. I’m planning a maintenance release, 7.

LockExplorer is no more

I’ve finally done what I should have done several years ago and shut down the LockExplorer site. I haven’t had the time required to keep the tool up to date and fewer people were interested than I originally expected. I may make the source code available at some point.

SetServiceStatus framework bug

One of my clients has been reporting an intermittent issue with the deployment of new releases of their game server. This runs as a Windows service on many, many, cloud machines and, just sometimes, the service seems to have issues during start up after upgrading the code on a machine that it has otherwise been running fine on. I’ve been adding debug code to our service start up code to try and work out what’s going on and today we had our first hit.

Migrating to Hugo

I have just completed migrating the blog from Movable Type to Hugo. Hopefully everything still works and is in the right place, but do let me know if you find any issues. The comments have been migrated to Disqus. I’ve been wanting to update my websites for quite a while now. I spent quite a lot of effort trying to find someone to do it for me but all of the web companies seemed to lose interest when they realised that I didn’t want an ongoing “SEO” package (I’ve always viewed SEO as “snake oil”).

JetByte News: Onwards into 2023!

It felt like things almost got back to normal in 2022, which was good. We like normal… It was another good year for us and we’re still happy doing what we love, writing C++ on multiple platforms and developing interesting code for diverse clients. Our gaming clients are all doing wonderfully well; our industrial control clients are happy and planning new projects; the large American postal company that will remain nameless is looking to extend the system we built for them a few years ago and our SIP TLS Gateway project now supports secure WebSockets as well as TCP.

Allowing renaming but not deleting for files on Windows

I’ve had a client ask if it’s possible to rename his server log file whilst the server is running but not allow deletion. This is harder than you’d expect to achieve. The established view of “the internet” is that NTFS doesn’t support permissions to allow file renaming and still prevent file deletion. This is true. If you want to allow renaming you need to create or open the file with FILE_SHARE_DELETE access and this allows rename AND delete.

Unsupported protocol - and the geeks score another own goal...

As of the latest Chrome, Edge, Opera, and FireFox updates all of my ‘obsolete’ hardware (routers, NAS drives, network switches, etc) are inaccessible as they don’t use TLS 1.2. I’m unlikely to be alone in this. I can understand the technical decision but IMHO it’s wrong and, actually pretty stupid. To make it more than a click through warning to access these obsolete devices on my local subnet. Sure ban connections to other subnets (that would cause me pain too as I manage some stuff via a VPN) but 90% of users would be fine.

JetByte News: More of the same...

2021 was another “interesting” year. We hope that things worked out OK for you. We’ve stayed nice and busy doing the things we love to do. So lots more C++ on various platforms for various clients. For us, and a few of our clients, 2021 was the year that NUMA really started to be a thing. Mostly, up until now, we’ve been able to ignore NUMA hardware. Most clients scale out across cheap hardware and we’re used to dealing with that.