书上看到的,有几点觉得还是值得注意。
1、头文件
win32: #include<winSock.h>
linux: #include<sys/socket.h>
2、关闭
win32: closeScoket(s);
linux: close(fd);
3、在NONBLOCKING模式下调用connect,大部分返回
win32: WSAEWOULDBLOCK
linux: EINPROGRESS
表示正在连接
4、scokadrr的长度单位
win32: int
linux: socklent_t
5、获取当前执行线程上的错误
win32: WSAGetLastError()
linux: errno
6、控制I/O模式函数
win32: ioctlsocket()
linux: ioctl();
7**、对于NONBLOCKING模式下调用connect后的成功判定。
win32: 调用select()时,该socket处理writefds中,并且不在exceptfds中,就表示连接成功。
linux: a连接成功时,该socket可写;b连接建立错误时,该socket即可读也可写。
解决方式是:当发现soket可写时,调用getsockopt()检测是否有错误发生。
bool foo() {
bool ret = false;
int err, len;
if( getsockopt( socket, SOL_SOCKET, SO_ERROR, (void*)&err, (socklen_t*)&len ) > 0 )
{ if( err == 0 ) ert = true; }
return ret;
}
8**、对已经关闭的soket调用send()
win32: 返回错误,没其他后果。
linux: 产生信号SIGPIPE,linux对该信号的默认操作是关闭进程
解决方法:预先注册SIGPIPE信号,
#include <signal.h>
void sig_pipe(int signal) { /* 处理 */ }
在程序启动时,进行注册
signal(SIGPIPE, sig_pipe);
9**、在监听socket设置了NONBLOCKING模式下,通过accept()产生的新的soket问题
win32: 会继承监听socket的属性
linux: 不会继承,必须手动设置NONBLOCKING模式,SetNonblocking(int fd);
10**、linux下,如果一个进程帮定某个port,那当进程结束时,该port仍然会被继续占用几十秒,在这段时间内尝试对该port的绑定都会返回失败。
解决方法:调用setsockopt()启用SO_REUSERADDR属性
bool foo() {
bool ret = false;
int opt = 1, len = sizeof(opt);
if( setsockopt( socket, SOL_SOCKET, SO_REUSERADDR, (const void*)&opt, len) > 0 )
{ ret = true; }
return ret;
}
socket相关程序从windows移植到linux下需要注意的
1。头文件
windows下winsock.h/winsock2.h
linux下sys/socket.h
2。初始化
windows下需要用WSAStartup
linux下不需要
3。关闭socket
windows下closesocket(...)
linux下close(...)
4。类型
windows下SOCKET
linux下int
5。获取错误码
windows下getlasterror()/WSAGetLastError()
linux下errno变量
6。设置非阻塞
windows下ioctlsocket()
linux下fcntl()
7。send函数最后一个参数
windows下一般设置为0
linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可 能会导致程序退出。
8。毫秒级时间获取
windows下GetTickCount()
linux下gettimeofday()
分享到:
相关推荐
笔者从事汇编编程已经有十几年的历史了,从8086时代的DOS汇编编程开始到当前的Win32汇编编程,从一个初学者到现在能利用Win32汇编来解决大部分编程需求,中间也经过了很长时间的摸索和大量的挫折,所以笔者很清楚...
### 从Windows转向Linux...以上内容覆盖了从Windows转向Linux的过程中所需要掌握的基本知识点,不仅包括了操作系统本身的使用,还涉及到了软件安装、网络配置、编程开发等多个方面,为初学者提供了一个全面的学习指南。
不过目前大多数较新的Linux发行版本(包括红旗 Linux、中软Linux、Mandrake Linux等)都可以自动挂装文件系统,但Red Hat Linux除外。 umount 1.作用 umount命令的作用是卸载一个文件系统,它的使用权限是超级...
### Windows环境下32位汇编语言程序设计(第2版)相关知识点 #### 一、32位汇编语言及Win32环境介绍 - **32位汇编语言**:这是一种面向机器的低级编程语言,适用于32位处理器架构。在Windows环境下,它被用来开发...
需要注意的是,由于权限和隐私原因,直接访问MAC地址在某些情况下可能受到限制。 通过"PB 取本地Mac和IP"这个压缩包,我们可以预期它包含了一个PowerBuilder的示例代码或者工具,演示了如何在PowerBuilder环境中...
SlickEdit 2011 V16.006是一款强大的源代码编辑器,专为程序员设计,支持多种操作系统,包括Windows 64位和32位版本。这款编辑器以其高效、全面的特性在IT行业中备受青睐,是开发人员进行代码编写和调试的重要工具。...
在计算机网络中,IP地址(Internet Protocol Address)是标识网络设备身份的重要标识,它由32位二进制数组成,通常用点分十进制的形式表示。IP地址分为两个部分:网络部分和主机部分,用于区分不同的网络和网络内的...
win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...
- 在Win32环境下开发应用程序的方法。 - **第十三章:Win32API及Registry** - Windows API的深入解析。 - 注册表操作的方法与注意事项。 - **第十四章:窗口间的应用与关系** - 窗口通信机制。 - 窗口管理与...
2. IP地址:IP地址是一个逻辑地址,根据IPv4标准,它由32位二进制组成,通常以4组十进制数表示,每组之间用点分隔,如`192.168.1.1`。IP地址用于在互联网上标识和寻址网络上的设备,是网络层的主要通信手段。 现在...
2. **数据包捕获**:可能需要使用如libpcap(在Linux中)或WinPcap(在Windows中)这样的库来捕获网络流量。 3. **字符串处理**:IP地址通常是文本字符串形式,所以需要了解如何在字符串中查找和解析IP模式。 4. *...
在 Win32 系统下,需要将其修改为 Windows 系统的路径,例如 `session.save_path = "c:\windows\temp"`。 #### 4. 显示错误信息 在开发环境中,可以开启 PHP 错误报告和显示错误信息的功能,方便调试。可以在 `...
- **错误恢复机制**:在网络不稳定或丢包的情况下,通过内建的错误隐藏和恢复技术保证视频流的流畅性。 - **实时性能**:优化的算法确保在低延迟环境下运行,适合实时通信应用。 - **跨平台支持**:除了Windows 64位...
win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...
win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...
win32情况下实现媒体播放。 preemptivepopupkiller C#源码,实现简单游览器。 RangeScan扫描器源代码 ip地址扫描,发送邮箱。 ResizableLib 测试开源界面库Resizable。 RsPicture 自定义了一个图片库,然后引用...
win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...
win32下实现视频播放。 C视频源代码 视频教程步骤源码 DDraw DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属...