socket相关程序从windows移植到linux下需要注意的
<wbr>Linux Socket编程中的shutdown和close<br>
1,只要TCP栈的读缓冲里还有未读取(read)数据,则调用close时会直接向对端发送RST。<br>
2,shutdown与socket描述符没有关系,即使调用shutdown(fd, SHUT_RDWR)也不会关闭fd,最终还需close(fd)。<br>
3,可以认为shutdown(fd, SHUT_RD)是空操作,因为shutdown后还可以继续从该socket读取数据,这点也许还需要进一步证实。<br>
4,在已发送FIN包后write该socket描述符会引发EPIPE/SIGPIPE。<br>
5,当有多个socket描述符指向同一socket对象时,调用close时首先会递减该对象的引用计数,计数为0时才会发送FIN包结束TCP连接。shutdown不同,只要以SHUT_WR/SHUT_RDWR方式调用即发送FIN包。<br>
6,SO_LINGER与close,当SO_LINGER选项开启但超时值为0时,调用close直接发送RST(这样可以避免进入TIME_WAIT状态,但破坏了TCP协议的正常工作方式),SO_LINGER对shutdown无影响。<br>
7,TCP连接上出现RST与随后可能的TIME_WAIT状态没有直接关系,主动发FIN包方必然会进入TIME_WAIT状态,除非不发送FIN而直接以发送RST结束连接。<br></wbr>
<wbr></wbr>
1)头文件
windows下winsock.h/winsock2.h
linux下sys/socket.h
错误处理:errno.h
<wbr></wbr>
2)初始化
windows下需要用WSAStartup
linux下不需要
<wbr></wbr>
3)关闭socket
windows下closesocket(...)
linux下close(...)
<wbr></wbr>
4)类型
windows下SOCKET
linux下int
如我用到的一些宏:
#ifdef WIN32
typedef int socklen_t;
typedef int ssize_t;
#endif
<wbr></wbr>
#ifdef __LINUX__
typedef int SOCKET;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
#define FALSE 0
#define SOCKET_ERROR (-1)
#endif
<wbr></wbr>
5)获取错误码
windows下getlasterror()/WSAGetLastError()
linux下errno变量
<wbr></wbr>
6)设置非阻塞
windows下ioctlsocket()
linux下fcntl()
<wbr></wbr>
7)send函数最后一个参数
windows下一般设置为0
linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可能会导致程序退出。
<wbr></wbr>
8)毫秒级时间获取
windows下GetTickCount()
linux下gettimeofday()
<wbr></wbr>
多线程
多线程: (win)process.h --〉(linux)pthread.h
_beginthread --> pthread_create
_endthread --> pthread_exit
分享到:
相关推荐
Nginx有Windows移植版 在Windows平台上支持select和iocp两种网络IO模型 在Windows平台上 Nginx的表现可能没有在其它平台上那么优秀 从目前的版本看 Nginx主要有以下几点可能需要改进的地方: 1 Nginx采用多...
深入分析Linux内核源码 前言 第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.3.1 Linux内核的特征 1.3.2 Linux内核版本的变化 1.4 分析Linux内核的意义 ...
Nginx有Windows移植版 在Windows平台上支持select和iocp两种网络IO模型 在Windows平台上 Nginx的表现可能没有在其它平台上那么优秀 从目前的版本看 Nginx主要有以下几点可能需要改进的地方: 1 Nginx采用多...
LibFetion是针对嵌入式设备系统设计的,它只使用了C库,提供平台线程库接口(缺省使用posix线程库)和网络接口(缺省使用socket)因此具有较强的可移植性。目前LibFetion已在Linux,uClinux,Mac OS X,IPhone,...
轻轻松松具有单个标头的现代C ++ 11本机,与操作系统无关的套接字库/启动程序代码包括特征简易:通过包含单个头文件开始使用简单的套接字功能可移植:在Windows和Linux上均可使用可配置:可以轻松地从头文件访问和...
目标硬件: 任何带有 8/25MHz 振荡器的基于 STM32F407/405/417/415 的电路板 引脚排列: ...适用于 Linux PCAN-View(需要安装PEAK Linux 驱动程序) 适用于 Windows 中的BUSMASTER和PEAK PCAN-View
2.可移植代码:代码符合ISO C++标准,不需要第三方库支持,支持win32、Linux、Mac OS X、Solaris、HPUX、BSDs 和 POSIX 系统 3.线程支持:提供简单的可移植的线程API 4.网络支持:提供简单的可移植的Socket API和...
编程语言:java 硬件平台 CPU:Pentium4以上 内存:128M以上 软件平台 操作系统:windows系列,mac系列,linux等 开发工具: Eclipse,JDK6 描述: (1)实现群聊和私聊; (2)实现文件的发送与接收; (3)实现截图功能...
一、套接字套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个...
这是UDP套接字的高度可移植,轻便,简单,零成本的抽象,并具有双栈IPv4 / IPv6支持,可快速实现面向消息的协议。 该库旨在与C,C ++,C#和其他语言实现跨语言兼容性。 对于.NET环境,函数支持使用blittable指针...
3.1.5 程序编辑器.......................................................................................................... 44 3.2 Makefile ................................................................
usb.util : 这个包提供了一些有用的实用程序,可以将 firmware下载到 USB 设备上、将 USB 系统的内容转储到 XML 中、以及将只有 bulk I/O 的 USB 设备工具转换成一个套接字(socket)。 usb.devices : 这个可选包收集...
DirectUI移植到MFC中实现。 MFCHtml 调用脚本 如题。 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了...
无论windows或linux系统,网络编" " "程都是针对socket套接字进行编程。通过本题目的学习,可以更好的把计算机网络" " "课程中学到的理论知识应用于实际,编制出符合实际需要的网络通信软件。同时可 " " "以了解聊天...
LibFetion是由邓东东主持开发的飞信应用程序开发库,其大部分...网络接口(缺省使用socket)因此具有较强的可移植性。 目前LibFetion已在Linux,uClinux,Mac OS X,IPhone,Windows,WinCE,eCos操作系统上成功运行。
DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果...
它旨在支持GNU / Linux , MS Windows和macOS作为一流的目标平台。 但是,该库不依赖于任何特定于平台的功能,因此它也应可与其他系统一起使用。 是一种基于现代网络标准(以太网,CAN FD等)的实时车内分布式计算...
13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。 循环链表,用取余操作做 14.不能做switch()的参数类型是: switch的参数不能为实型。 1.写出判断ABCD四个表达式的...
DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果...
DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果...