Sku*_*del 6 c++ portability winsock
我即将在C++中开发一些与套接字相关的东西,并且希望软件从一开始就尽可能在Windows和Linux之间移植(以后便携它很棘手.)
我看过不同的库,有一个来自alhem.net的 C++ ,当然还有boost :: asio.boost :: asio看起来非常有前景,但对于这么小的应用程序来说是一个非常大的依赖.
是否值得自己写这些东西或者我应该只使用图书馆?如果我自己做,那么主要的陷阱是什么?
我在套接字周围开发了一些便携式包装器.确保你没有沿着由WinSock2事件构成的无法回归的蹩脚线路走下去.除此之外,正如我所看到的,最大的区别是:
::WSAStartup(),在Windows中关闭它,运行::WSACleanup(); 在Linux中什么都不做,close()在Linux中是closesocket()在Windows中SO_RCVBUF和设置它们SO_SNDBUF,::ioctlsocket()在Windows中,::fcntl()在Linux中使用套接字非阻塞<sys/socket.h>Linux <WinSock.h>中的朋友,在Windows中,::select()等待数据到达,fd_set在Windows/Linux上完全不同; 这只有在需要优化fd_sets的初始化时才有意义,例如在添加/删除任意套接字时,::recvfrom(),如果线程阻塞了套接字,您可以考虑使用::sendto()在Linux下释放停滞线程.我所需要的其他所有东西都是出自låda.
Winsocks 与 Posix 套接字不太兼容:
SOCKET。在 Posix 上,它只是一个文件描述符 ( int),您可以在其上执行正常操作read()和write()调用。recv()和上的某些选项send()。shutdown()或关闭Windows套接字close()。而是类似的东西closesocket()。肯定还有更多的差异,但这就是我现在能记得的。如果您想要 Winsocks 的可移植性,您将拥有一个用于关闭套接字、打印错误消息等的小型库。
我个人可能会选择boost::asio(但我从未使用过它)。
| 归档时间: |
|
| 查看次数: |
2172 次 |
| 最近记录: |