I guess your problem is caused by the system call to make the socket non-blocking. I never did TCP/IP coding on WIndows system, so this is just my rough evaluation of the problem based on my previous experience.
Usually , when you need an event driven architecture, you have to make your socket non-blocking because the connect() call is a blocking one, which can prevent the system from doing other things while waiting. On unix , we use fcntl() to change the nature of the socket into a non-blocking one, and on vxWorks, we use ioctl(). I assume you use ioctl() on windows to do the same thing. This ioctl() is a system call, and it has different semantics on different platforms, I guess WinNT and 98 have
some subtle difference on this function. As a result, when you move your source code from 98 to winNt, something is broken. Give me some fragments of your code, I can take a look at it for you. It's really hard to discussion programming bugs without source code.