Yes, you will get very far with a wrapper around Winsock and standard Berkeley sockets. In fact, the differences are so small it's almost possible to do it with #ifdef directly in the code.
That is, if you're willing to work at the socket level. If you're after something more abstract, then of course wrapping it gives you a good opportunity to also hide the differences.
In particular, Winsock:
- Requires you to "start it up" by calling
WSAStartup() before any other socket function
- Does not allow you to use plain old close() on a socket; you must use
closesocket()
- Requires that you use
WSAGetLastError() to get the last error, not plain errno.
Those are the three major ones off the top of my head, there might be more.