当前位置: 首页 > news >正文

socket在windows下和linux下的区别

1)头文件
windows下winsock.h/winsock2.h
linux下sys/socket.h    错误处理:errno.h

2)初始化
windows下需要用WSAStartup

 WSADATA wsaData;

        err = WSAStartup(0x202,&wsaData);     if ( err != 0 )
 {
          return 0;
     }
     else if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )   //检测是否支持这个版本的socket
     {
          WSACleanup( );
         return 0;
     }

对应的退出清理用WSACleanup( );
linux下不需要

3)关闭socket
windows下closesocket(...)
linux下close(...)

4)socket类型
windows下SOCKET
linux下int

5)获取错误码
windows下WSAGetLastError()

linux下errno变量

 extern int errno;
        int geterror(){return errno;}

6)设置非阻塞
windows下ioctlsocket(server_socket,FIONBIO,&ul);     int ul = 1
linux下fcntl(server_socket,F_SETFL, O_NONBLOCK);    <fcntl.h>


7)send函数最后一个参数
windows下一般设置为0
linux下必须是后几个参数用到的socket中,值最大的数(整型)加1 (另一种说法是设置为MSG_NOSIGNAL)


8)毫秒级时间获取
windows下GetTickCount()
linux下gettimeofday()

9)编译连接

windows下ws2_32.lib
linux下

 连接是使用参数:-lstdc
        运行时需要libstdc++.so.5,可在/usr/lib目录中创建一个链接。

10)Socket操作错误返回值

都为SOCKET_ERROR,他的值是-1

11)异常处理

windows下没有对send()的异常处理,最后一个参数无效,写0就可以了。

linux下

 当连接断开,还发数据的时候,不仅send()的返回值会有反映,而且还会像系统发送一个异常消息,如果不作处理,系统会出BrokePipe,程序会退出。为此,send()函数的最后一个参数可以设置MSG_NOSIGNAL,禁止send()函数向系统发送异常消息。

12)WSA宏

windows下WSA相关的操作

linux下WSA相关的操作在Linux不必要,直接去掉即可


3、多线程
多线程: (win)process.h --〉(linux)pthread.h
_beginthread --> pthread_create
_endthread --> pthread_exit

相关文章:

  • 还是小孩子。。。。
  • JavaScript 闭包
  • 一台笔记本烦人
  • 一起学DHCP系列(七)租约、释放
  • 没事常看看
  • 数据链路层plus——TCP/IP Review
  • [转]NHibernate文章转载
  • 解决方案:诊断帐号被Lockout的原因
  • 深入解析跨站请求伪造漏洞(转)
  • 邮件服务器解决方案
  • Linux VNC Server多用户访问设置
  • 定制扑克有几大优势
  • 常见的开放源代码许可证类型
  • Windows server 2003DFS文件服务器的配置
  • Delphi IDE扩展开发向导
  • 【笔记】你不知道的JS读书笔记——Promise
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • exports和module.exports
  • js 实现textarea输入字数提示
  • js中forEach回调同异步问题
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • 前端临床手札——文件上传
  • 实现简单的正则表达式引擎
  • 收藏好这篇,别再只说“数据劫持”了
  • 我从编程教室毕业
  • 一道闭包题引发的思考
  • 一个完整Java Web项目背后的密码
  • 由插件封装引出的一丢丢思考
  • 正则学习笔记
  • 带你开发类似Pokemon Go的AR游戏
  • (1)虚拟机的安装与使用,linux系统安装
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Oracle)SQL优化技巧(一):分页查询
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (过滤器)Filter和(监听器)listener
  • (三) diretfbrc详解
  • (三)c52学习之旅-点亮LED灯
  • (转)c++ std::pair 与 std::make
  • (转)linux 命令大全
  • (转)Linux下编译安装log4cxx
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET成年了,然后呢?
  • .net网站发布-允许更新此预编译站点
  • @RequestBody与@ModelAttribute
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [ C++ ] 继承