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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发 -- 分享 互助 成长

linux下进程相关操作

一、定义和理解 狭义定义:进程是正在运行的程序的实例。 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 进程的概念主要有两点: 第一...

26950
来自专栏Kevin-ZhangCG

[ Java面试题 ]JavaWeb篇

40480
来自专栏漏斗社区

工具| 手把手教你制作信息收集器之端口扫描

本期任务:使用python脚本实现端口扫描。 准备工具:选项分析器:optparse;网络库:socket 问题引入 1. 端口扫描器扫描效果如何? ...

34860
来自专栏架构师之路

一分钟实现分布式锁

一、缘起 分布式环境下,多台机器上多个进程对一个数据进行操作,如果不做互斥,就有可能出现“余额扣成负数”,或者“商品超卖”的情况,如何实现简易分布式锁,对分布式...

42660
来自专栏Netkiller

Application Firewall Design

Application Firewall Design Web Application Firewall, 7layer Firewall ---- 目录 1....

30840
来自专栏Linux驱动

第3阶段——内核启动分析之make uImage编译内核(3)

目标: 通过分析makefile,明白make uImage如何编译内核 把整个内核的makefile分成三类(makefile资料文档在linux-2.6.2...

221100
来自专栏张戈的专栏

Linux运维工程师:30道面试题整理

前段时间,我在准备面试的时搜到的一套 Linux 运维工程师面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需。 1....

2.3K50
来自专栏fixzd

redis系列:基于redis的分布式锁

这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。

16320
来自专栏QQ音乐技术团队的专栏

ContentProvider简介

(一) 基础知识 Content Provider属于Android四大组件之一,相比较而言,它更侧重于共享数据。Android的数据存储方式有以下几种:...

35560
来自专栏Linux驱动

第3阶段——内核启动分析之make uImage编译内核(3)

目标: 通过分析makefile,明白make uImage如何编译内核 把整个内核的makefile分成三类(makefile资料文档在linux-2.6.2...

41860

扫码关注云+社区

领取腾讯云代金券