将Socket从Unix向Windows移植中几点问题
来源:互联网 发布:js 字符串包含子串 编辑:程序博客网 时间:2024/06/06 10:07
在Unix Sockets应用程序中包含头文件的语句为#include<sys/socket.h>,而在Windows Sockets应用程序中相应语句应为 #include<winsock.h>。
在Unix系统中,套接字类型定义为int型,而在Windows系统中,套接字类型被定义为SOCKET型,即unsigned int型。
在Unix系统中,获取、设置错误码使用全局变量errno,而在Windows系统中则应将其改为用函数WSAGetLastError()和WSASetLastError()。
在Unix系统中使用close()函数来关闭套接字,而在Windows系统中则用closesocket()函数。
在Unix系统中,使用ioctl()函数和fcntl()函数实现对套接字的控制,而在Windows系统中则应使用ioctlsocket()函数。
在Unix Sockets和Windows Sockets中对这两个函数提供的支持不同。在Windows Sockets中getsockopt()与setsockopt()不支持的Berkeley Sockets选项有:
SO_RCVLOWAT 接受低潮标志
SO_RCVTIMEO 接受超时
SO_SNDLOWAT 发送低潮标志
SO_SNDTIMEO 发送超时
IP_OPTIONS 取得IP头中的选项
TCP_MAXSEG 取得TCP最大尺寸
SO_ACCEPTCONN 套接字正在监听
SO_ERROR 取错误状态并清除
SO_TYPE 套接字类型
使用不支持的选项将返回错误码WSAENOPROTOOPT,它由WSAGetLastError()函数返回。
由于提供的支持不同,进行移植时若有必要应修改相应的源程序。
由于Windows Sockets 某些函数在接口上虽然与Unix Sockets一致,但是它们的内部实现却不一样,例如,在函数select()的参数中,Unix Sockets实现套接字集合使用的是位掩码,但在Windows Sockets中却是使用一个SOCKET的数组。虽然套接字的集合仍由fd_set类型表示,但在Unix Sockets 源文件中直接修改fd_set结构的代码在Windows Sockets环境下将不能正常工作。因此,在进行移植时应将源程序中对结构fd_set的直接修改改为通过使用FD_XXX宏来修改。
Windows是非抢先多任务环境,各任务之间的切换是通过消息驱动的,如果一个应用程序不能主动放弃其控制权,别的应用程序就不能够执行,这一点与Unix操作系统有着本质的区别。对于从Unix Sockets环境中移植来的应用程序来说,阻塞问题必须考虑。
为解决阻塞问题,Windows Sockets特增设了如下几个阻塞处理函数:
WSAIsBlocking() 检测阻塞调用是否正在进行
WSACancelBlockingCall() 取消一个正在进行的阻塞调用
WSASetBlocking() 设置自己的阻塞处理例程
WSAUnhookBlockingHook() 恢复默认的阻塞处理例程
为不影响原来环境中的阻塞处理例程,在安装自己的阻塞处理例程时,应注意保存返回的先前安装的阻塞处理例程的程序实例指针,并在处理结束后恢复。
在Windows Sockets网络程序设计中,尽管它允许阻塞操作,但是一个阻塞可能阻塞整个Windows环境,而在Unix Sockets程序中,套接字的默认操作模式却是阻塞的。Windows Sockets为了支持Windows消息驱动机制,对网络事件采用了基于消息的异步存取策略,较好的解决了阻塞问题。为此,建议最好将源程序中的阻塞调用改为基于消息的异步操作。
Windows Sockets为实现异步存取操作增设了如下的有关函数:
WSAAsyncSelect() 标准Berkeley函数select()的异步版本
- 将Socket从Unix向Windows移植中几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- Socket编程:由Linux向Windows移植问题
- socket从Linux向win移植
- 从 Windows 移植到 UNIX 环境
- 从Windows 移植到 UNIX 环境
- Windows 程序向Windows mobile移植问题
- Socket程序从Windows移植到Linux
- 将 Java Web 应用从 Windows 移植到 AIX 时需要注意的问题
- VC++2005项目的目录结构设置
- JSP乱码问题及解决方法
- 十里红毯or十里长亭
- Excel单元格内文本换行三法
- Excel XP技巧100
- 将Socket从Unix向Windows移植中几点问题
- Windows中一些应用特效技巧
- Linux系统下.ko文件是什么文件?.so文件是什么文件?
- 2010年学习计划
- 快速获取Word 2000快捷键列表
- Word使用技巧集锦
- C#中的析构函数和垃圾回收器
- linux 统计当前目录下文件数
- 嵌入设备电池电量