没有合适的资源?快使用搜索试试~ 我知道了~
win32linux相互移植网络编程需要注意的地方(转).pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 50 浏览量
2021-11-09
01:16:56
上传
评论
收藏 14KB PDF 举报
温馨提示
试读
3页
win32linux相互移植网络编程需要注意的地方(转).pdf
资源推荐
资源详情
资源评论
1 / 3
win32/linux 相互移植网络编程需要注意的地方 ( 转)
宏兼容代码写法
如我用到的一些宏:
#ifdef WIN32
typedef int socklen_t;
typedef int ssize_t;
#endif
#ifdef __LINUX__
typedef int SOCKET;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
#define FALSE 0
#define SOCKET_ERROR (-1)
#endif
1、头文件
win32: #include<winSock.h>
linux: #include<sys/socket.h>
linux 下 netinet/in.h (大部分都在这儿) ,unistd.h (close 函数在这儿) ,sys/socket.h (在 in.h 里已经包含了,
可以省了)
2。初始化
windows 下需要用 WSAStartup
并且要用 #pragma comment(lib,"Ws2_32") 来告知编译器链接该 lib 。 Windows Sockets 的接口函数中,提供了
WSAStartup() 与 WSACleanup()两个函数,用于在程序开始时初始化 Windows Sockets DLL和程序结束时释放 Windows
Sockets DLL 资源,它们是编写 Windows Sockets 应用程序时必须使用的两个函数。
linux 下不需要
3、scokadrr 的长度单位
win32: int
linux: socklent_t
4。类型
windows 下 SOCKET 即 unsigned int 型
linux 下 int
5、关闭
win32: closeScoket(s);
linux: close(fd);
6、控制 I/O 模式函数 设置非阻塞
win32: ioctlsocket()
linux: ioctl(); fcntl() ,需要头文件 fcntl.h
7、在监听 socket 设置了 NONBLOCKING模式下,通过 accept() 产生的新的 soket 问题
win32: 会继承监听 socket 的属性
linux: 不会继承,必须手动设置 NONBLOCKING模式, SetNonblocking(int fd);
7、对于 NONBLOCKING模式下调用 connect 后的成功判定。
win32: 调用 select() 时,该 socket 处理 writefds 中,并且不在 exceptfds 中,就表示连接成功。
linux: a 连接成功时,该 socket 可写; b 连接建立错误时,该 socket 即可读也可写。
解决方式是:当发现 soket 可写时,调用 getsockopt() 检测是否有错误发生。
bool foo()
{
资源评论
fuhongy
- 粉丝: 0
- 资源: 4万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功