Khaled, do you happen to use WSAEventSelect or select() for socket polling? Because if you do, Windows has a limit of 64 sockets. If you use select() you can just up FD_SETSIZE at compile time, if you use WSAEventSelect, from everything I can find, there is nothing you can do to increase the limit. That kind of sounds like what the problem is here. Because socket() and open() will complete successfully it in theory would start the send and then almost immediately drop it. This is because the non-blocking socket will never trigger in select() because the fd_set isn't large enough. And in fact (as I'm sure you already know) trying to put it in the fd_set can cause memory access errors since you are going passed array bounds. Just an idea, I might be totally wrong...