socket在windows下和linux下的区别

 我来答
fCz288d
2016-09-02 · TA获得超过209个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:394万
展开全部
  下面大概分几个方面进行罗列:
  Linux要包含

  [cpp]
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <netdb.h>
  #include <arpa/inet.h>
  等头文件,而windows下则是包含
  [cpp]
  #include <winsock.h>
  。

  Linux中socket为整形,Windows中为一个SOCKET。
  Linux中关闭socket为close,Windows中为closesocket。
  Linux中有变量socklen_t,Windows中直接为int。
  因为linux中的socket与普通的fd一样,所以可以在TCP的socket中,发送与接收数据时,直接使用read和write。而windows只能使用recv和send。
  设置socet选项,比如设置socket为非阻塞的。Linux下为

  [cpp]
  flag = fcntl (fd, F_GETFL);
  fcntl (fd, F_SETFL, flag | O_NONBLOCK);
  ,Windows下为
  [cpp]
  flag = 1;
  ioctlsocket (fd, FIONBIO, (unsigned long *) &flag);
  。
  当非阻塞socket的TCP连接正在进行时,Linux的错误号为EINPROGRESS,Windows的错误号为WSAEWOULDBLOCK。

  file
  Linux下面,文件换行是"\n",而windows下面是"\r\n"。
  Linux下面,目录分隔符是"/",而windows下面是"\"。
  Linux与Windows下面,均可以使用stat调用来查询文件信息。但是,Linux只支持2G大小,而Windows只支持4G大小。为了支持更大的文件查询,可以在Linux环境下加

  _FILE_OFFSET_BITS=64定义,在Windows下面使用_stat64调用,入参为struct __stat64。
  Linux中可根据stat的st_mode判断文件类型,有S_ISREG、S_ISDIR等宏。Windows中没有,需要自己定义相应的宏,如

  [cpp]
  #define S_ISREG(m) (((m) & 0170000) == (0100000))
  #define S_ISDIR(m) (((m) & 0170000) == (0040000))
  Linux中删除文件是unlink,Windows中为DeleteFile。

  time

  Linux中,time_t结构是长整形。而windows中,time_t结构是64位的整形。如果要在windows始time_t为32位无符号整形,可以加宏定义,_USE_32BIT_TIME_T。
  Linux中,sleep的单位为秒。Windows中,Sleep的单位为毫秒。即,Linux下sleep (1),在Windows环境下则需要Sleep (1000)。
  Windows中的timecmp宏,不支持大于等于或者小于等于。
  Windows中没有struct timeval结构的加减宏可以使用,需要手动定义:
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式