`
445822357
  • 浏览: 741239 次
文章分类
社区版块
存档分类
最新评论

Socket相关程序:从Windows移植到Linux

 
阅读更多

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 v1.5.9 for windows 源程序

    Nginx有Windows移植版 在Windows平台上支持select和iocp两种网络IO模型 在Windows平台上 Nginx的表现可能没有在其它平台上那么优秀 从目前的版本看 Nginx主要有以下几点可能需要改进的地方: 1 Nginx采用多...

    深入分析Linux内核源码

    深入分析Linux内核源码 前言 第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.3.1 Linux内核的特征 1.3.2 Linux内核版本的变化 1.4 分析Linux内核的意义 ...

    nginx v1.5.9 for windows

    Nginx有Windows移植版 在Windows平台上支持select和iocp两种网络IO模型 在Windows平台上 Nginx的表现可能没有在其它平台上那么优秀 从目前的版本看 Nginx主要有以下几点可能需要改进的地方: 1 Nginx采用多...

    linux版飞信(开源)

    LibFetion是针对嵌入式设备系统设计的,它只使用了C库,提供平台线程库接口(缺省使用posix线程库)和网络接口(缺省使用socket)因此具有较强的可移植性。目前LibFetion已在Linux,uClinux,Mac OS X,IPhone,...

    easy-socket:现代C ++ 11本机,与操作系统无关的套接字库,以单个标头开头,包括

    轻轻松松具有单个标头的现代C ++ 11本机,与操作系统无关的套接字库/启动程序代码包括特征简易:通过包含单个头文件开始使用简单的套接字功能可移植:在Windows和Linux上均可使用可配置:可以轻松地从头文件访问和...

    用于 STM32F4硬件的 XCAN PRO/PRO FD/FD USB2CAN 固件实现stm32f4 socketcan_c

    目标硬件: 任何带有 8/25MHz 振荡器的基于 STM32F407/405/417/415 的电路板 引脚排列: ...适用于 Linux PCAN-View(需要安装PEAK Linux 驱动程序) 适用于 Windows 中的BUSMASTER和PEAK PCAN-View

    dlib-18.1 各种数据处理 学习的c++源代码

    2.可移植代码:代码符合ISO C++标准,不需要第三方库支持,支持win32、Linux、Mac OS X、Solaris、HPUX、BSDs 和 POSIX 系统 3.线程支持:提供简单的可移植的线程API 4.网络支持:提供简单的可移植的Socket API和...

    基于java的局域网聊天系统-毕业设计.doc

    编程语言:java 硬件平台 CPU:Pentium4以上 内存:128M以上 软件平台 操作系统:windows系列,mac系列,linux等 开发工具: Eclipse,JDK6 描述: (1)实现群聊和私聊; (2)实现文件的发送与接收; (3)实现截图功能...

    python socket网络编程步骤详解(socket套接字使用)

    一、套接字套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个...

    NanoSockets:轻型UDP套接字抽象,可快速实现面向消息的协议

    这是UDP套接字的高度可移植,轻便,简单,零成本的抽象,并具有双栈IPv4 / IPv6支持,可快速实现面向消息的协议。 该库旨在与C,C ++,C#和其他语言实现跨语言兼容性。 对于.NET环境,函数支持使用blittable指针...

    LINUX系统开发技术详解---基于ARM

    3.1.5 程序编辑器.......................................................................................................... 44 3.2 Makefile ................................................................

    jsr80 java 访问 usb

    usb.util : 这个包提供了一些有用的实用程序,可以将 firmware下载到 USB 设备上、将 USB 系统的内容转储到 XML 中、以及将只有 bulk I/O 的 USB 设备工具转换成一个套接字(socket)。 usb.devices : 这个可选包收集...

    vc++ 开发实例源码包

    DirectUI移植到MFC中实现。 MFCHtml 调用脚本 如题。 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了...

    Java聊天室的设计与实现设计开题报告.doc

    无论windows或linux系统,网络编" " "程都是针对socket套接字进行编程。通过本题目的学习,可以更好的把计算机网络" " "课程中学到的理论知识应用于实际,编制出符合实际需要的网络通信软件。同时可 " " "以了解聊天...

    LibFetion 源代码

    LibFetion是由邓东东主持开发的飞信应用程序开发库,其大部分...网络接口(缺省使用socket)因此具有较强的可移植性。 目前LibFetion已在Linux,uClinux,Mac OS X,IPhone,Windows,WinCE,eCos操作系统上成功运行。

    vc++ 应用源码包_1

    DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果...

    pyuavcan:UAVCAN协议栈的Python实现

    它旨在支持GNU / Linux , MS Windows和macOS作为一流的目标平台。 但是,该库不依赖于任何特定于平台的功能,因此它也应可与其他系统一起使用。 是一种基于现代网络标准(以太网,CAN FD等)的实时车内分布式计算...

    C/C++笔试题(附答案,华为面试题系列)

    13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。 循环链表,用取余操作做 14.不能做switch()的参数类型是: switch的参数不能为实型。 1.写出判断ABCD四个表达式的...

    vc++ 应用源码包_2

    DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果...

    vc++ 应用源码包_6

    DirectUI移植到MFC中实现。 MFCHtml 调用脚本 MFC使用COM加载WMI服务,另类获取系统服务详细 大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果...

Global site tag (gtag.js) - Google Analytics