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

海淘网站网站右侧浮动微信二维码

海淘网站,网站右侧浮动微信二维码,产品的营销渠道有哪些,莱芜在线论坛话题莱芜都市网Socket 是网络协议栈暴露给编程人员的 API#xff0c;相比复杂的计算机网络协议#xff0c;API 对关键操作和配置数据进行了抽象#xff0c;简化了程序编程。 本文讲述的 socket 内容源自 Linux 发行版 centos 9 上的 man 工具#xff0c;和其他平台#xff08;比如 os-x …        Socket 是网络协议栈暴露给编程人员的 API相比复杂的计算机网络协议API 对关键操作和配置数据进行了抽象简化了程序编程。 本文讲述的 socket 内容源自 Linux 发行版 centos 9 上的 man 工具和其他平台比如 os-x 及不同版本会有些出入。本文主要对各 API 进行详细介绍从而更好的理解 socket 编程。 一.socket()  遵循 POSIX.1 - 2001、POSIX.1-2008、4.4BSD 1.库 标准 c 库libc, -lc 2.头文件 sys/socket.h 3.接口定义 int socket(int domain, int type, int protocol); 4.接口描述 创建一个通信端点endpoint通信的每一端都可以成为一个 endpoint返回指向该端点的文件描述符。socket() 是所有其他操作的前提比如创建了 socket才能进一步的设置以及使用网络。 5.参数 domain socket 的网络协议簇通常包括:AF_INET ipv4     网络协议AF_INET6 ipv6    网络协议有时也会兼容 ipv4AF_UNIX          本地socket也就是我们常说的 domain socket type  SOCK_STREAM      TCP有序、可靠、双向的基于连接的字节流可选支持带外数据传输SOCK_DGRAM       UDP数据报文传输非连接的、不可靠的、有固定最大长度SOCK_SEQPACKET   不粘包的 TCP有序、可靠、双向具有最大数据报长度的传输SOCK_RAW       提供原始网络协议访问SOCK_RDM 提供可靠的数据报传输层但是不保证报文顺序 注意有些类型可能协议簇未实现 带外数据传输指的是 TCP 在紧急情况下通过调整报文在发送/接收缓冲区的位置以及数据包中添加紧急标记的逻辑。  protocol 指定具体的传输协议比如 IPPROTO_TCP, IPPROTO_SCTP, IPPROTO_UDP, IPPROTO_DCCP在netinet/in.h 中定义 6.返回值 发生错误时返回 -1设置 errno 指示错误码否则返回一个新创建的整型文件描述符。 可能的错误码包括 错误码含义EACCES没有权限创建对应的 socketEAFNOSUPPORT实现不支持指定的 AF_ 地址家族EINVAL未知的协议或者地址家族不可用EINVALtype 参数不合法EMFILE进程文件描述符到达最大限制ENFILE系统文件描述符到达上限ENOBUFS or ENOMEM内存不足EPROTONOSUPPORTdomain 不支持指定的协议类型 二、bind 遵循 POSIX.1-2008 1.库 标准 c 库libc, -lc 2.头文件 sys/socket.h 3.接口定义 int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 4.接口描述 通过 socket() 接口创建 socket 后socket 只存在于名字空间中并没有实际的地址分配给它。bind 接口将 addr 指定的 IP 地址分配给由文件描述符 sockfd 指定的 socket。addrlen 指定了 addr 指针指向的地址结构的字节长度。以前我们将这个操作给 socket 分配名字。 通常在 TCP_STREAM socket 接收连接前需要将一个本地地址通过 bind 分配给 socket。 名字绑定规则随着地址家族的不同而不同。 addr 的数据结构也是随着地址家族的变化而变化的。sockaddr 结构的定义类似 struct sockaddr {sa_family_t sa_family;char sa_data[14];} 这个结构定义主要是为了防止编译器报错主要是将各种地址结构做一个强制转换。 5. 返回值 发生错误时返回 -1设置 errno 指示错误码否则返回一个新创建的整型文件描述符。 可能的错误码包括 错误码含义EACCES地址是保护地址并且用户不是超级用户EADDRINUSE指定的地址已经使用EADDRINUSE 对于 domain socket端口号在地址结构体中 指定为 0但在尝试 bind 到临时端口时临时端口没有空闲的了 EBADFsockfd 不是可用的文件描述符EINVALsocket 已经绑定到了一个地址EINVALaddrlen 错误或者 addr 不是一个可用的 domain 地址ENOTSOCK文件描述符没有指向任何 socketUNIX domainAF_UNIX 特定的错误码EACCESS在路径前缀下无搜索权限EADDRNOTAVAIL请求的接口不存在或者不是本地的接口EFAULTaddr 指向了用户无法访问的地址空间ELOOP解析地址时遇到了太多的符号链接ENAMETOOLONG地址太长ENOENT指定路径不存在ENOMEM内核内存不足ENOTDIR路径前缀不是一个目录EROFSsocket inode 位于只读文件系统中 6.示例代码 #include stdio.h#include stdlib.h#include string.h#include sys/socket.h#include sys/un.h#include unistd.h#define MY_SOCK_PATH /somepath#define LISTEN_BACKLOG 50#define handle_error(msg) \do { perror(msg); exit(EXIT_FAILURE); } while (0)intmain(void){int sfd, cfd;socklen_t peer_addr_size;struct sockaddr_un my_addr, peer_addr;sfd socket(AF_UNIX, SOCK_STREAM, 0);if (sfd -1)handle_error(socket);memset(my_addr, 0, sizeof(my_addr));my_addr.sun_family AF_UNIX;strncpy(my_addr.sun_path, MY_SOCK_PATH,sizeof(my_addr.sun_path) - 1);if (bind(sfd, (struct sockaddr *) my_addr,sizeof(my_addr)) -1)handle_error(bind);if (listen(sfd, LISTEN_BACKLOG) -1)handle_error(listen);/* Now we can accept incoming connections oneat a time using accept(2). */peer_addr_size sizeof(peer_addr);cfd accept(sfd, (struct sockaddr *) peer_addr,peer_addr_size);if (cfd -1)handle_error(accept);/* Code to deal with incoming connection(s)... */if (close(sfd) -1)handle_error(close);if (unlink(MY_SOCK_PATH) -1)handle_error(unlink);} 三、accept 1.库 标准 c 库libc, -lc 2.头文件 sys/socket.h 3.接口定义 int accept(int sockfd, struct sockaddr *_Nullable restrict addr,socklen_t *_Nullable restrict addrlen);#define _GNU_SOURCE /* See feature_test_macros(7) */ #include sys/socket.hint accept4(int sockfd, struct sockaddr *_Nullable restrict addr,socklen_t *_Nullable restrict addrlen, int flags); 4.接口描述 accept 系统调用用于面向连接的 socket SOCK_STREAM、SOCK_SEQPACKET它会从监听的 socketsockfd的等待连接队列里拿到第一个连接请求创建一个新的连接的 socket并返回一个新的文件描述指向这个新的 socket。新创建的 socket 并没有处于监听状态原来的 socketsockfd并不会受到任何影响。 sockfd 是由 sockect() 创建的并通过 bind 绑定到了本地地址上并通过 listen 监听连接。 addr 是一个指向 sockaddr 结构的指针这个地址由对端 socket 的地址填充。而返回的 addr 的结构类型根据 socket 地址家族的不同而不同。当 addr 是 NULL 时底层并不会对其填充这种情况下 addrlen 也没有用也应该是 NULL。 addrlen 参数是一个输入输出参数调用者必须使用 addr 指向的结构体的大小来初始化它而在返回时则会使用对端地址的实际大小来填充。 如果提供的 buffer 太小则返回的地址将会被截断这种情况下addrlen 会返回一个比提供值大的值。 如果当前等待连接队列中没有待连接请求并且 socket 没有被设置成非阻塞那么 accept() 将会一直阻塞。如果 socket 设置为非阻塞那么 accept() 将报错为 EAGAIN 或者 EWOULDBLOCK。 为了获取 socket 上有连接请求过来我们需要使用 select、poll、epoll。当一个新连接来临时会产生一个可读事件我们可以使用 accept 来继续从连接上获取一个 socket。 我们也可以设置 socket 上有连接时发送 SIGIO 信号。 如果 flag 是 0那么 accept4() 就等同于 accept()。flag 可以是下面配置的或起来的值来实现不同的行为 SOCK_NONBLOCK 设置新文件描述符的 O_NONBLOCK 属性 SOCK_CLOEXEC 设置新文件描述符的 FD_CLEXEC 属性。 5.返回值 成功时返回一个新接收的 socket 的文件描述符非负值。 出错时返回 -1设置 errno 为错误码addrlen 不会被修改。 错误处理 Linux 的 accept() 会将既存的网络错误也会给返回值这个行为和其他 BSD socket 实现的行为不太一样。为了可靠性我们应该处理 accept 返回网络错误这些错误是和协议相关的。比如 EAGAIN 表示重传在TCP/IP 的场景下还有 ENETDOWN、 EPROTO、 ENOPROTOOPT, EHOSTDOWN、 ENONET、 EHOSTUNREACH、 EOPNOTSUPP、 ENETUNREACH等需要处理。 可能的错误码包括 错误码含义EAGAIN或EWOULDBLOCKsocket 设置为非阻塞目前没有可用连接。POSIX.1-2001 和 POSIX.1-2008 允许范围任何一个错误同时并没有他们有相同的值所以为了实现移植性需要分别判断。ECONNABORTED连接已中断EFAULT addr 不是用户地址空间可写的地址 EBADFsockfd 不是打开的文件描述符EINVALsocket 没有在监听连接或者addrlen不合法EINVALaccept4flags 值不合法ENOTSOCK文件描述符没有指向任何 socketEINTR在连接到达前系统调用被信号打断EMFILE进程描述符数达到上限EFAULTaddr 指向了用户无法访问的地址空间ENFILE系统文件描述符达到上限ENAMETOOLONG地址太长ENOENT指定路径不存在ENOMEM或ENOBUFS内核内存不足EOPNOTSUPPsocket 不 SOCK_STREAM 类型EPERM防火墙禁止连接EPROTO协议错误 Linux 上新创建的 socket 并不会从监听 socket 上继承 O_NONBLOCK 和 O_AYSNC 属性这点和 canonical BSD socket 实现的行为不同。所以实现可移植的程序不应该依赖这些行为。 值得注意的是有时在我们收到 SIGIO 或者通过select、poll、epoll 获得到一个刻度的事件时并不一定就会有一个连接等待连接这是因为连接很可能会被异步网络错误或者其他线程通过 accept() 拿走了。在这种情况下就会导致 accept 阻塞直到下一个连接到达。为了保证 accept 永远不会阻塞传来的 socketfd 需要有 O_NONBLOCK 属性。 在最初的 BSD socket 实现中accept 的第三个参数是 int *在 POSIX.1g 草稿版标准想把它改成 size_t *C后来 POSIX 标准和glibc 2.x 定为 socket_t *。 遵循 accept()   POSIX.1-2008 accept4    Linux 
文章转载自:
http://www.morning.chzqy.cn.gov.cn.chzqy.cn
http://www.morning.zzgtdz.cn.gov.cn.zzgtdz.cn
http://www.morning.zmwd.cn.gov.cn.zmwd.cn
http://www.morning.rshijie.com.gov.cn.rshijie.com
http://www.morning.tktyh.cn.gov.cn.tktyh.cn
http://www.morning.pqppj.cn.gov.cn.pqppj.cn
http://www.morning.tzmjc.cn.gov.cn.tzmjc.cn
http://www.morning.ttxnj.cn.gov.cn.ttxnj.cn
http://www.morning.dhmll.cn.gov.cn.dhmll.cn
http://www.morning.brrxz.cn.gov.cn.brrxz.cn
http://www.morning.plfrk.cn.gov.cn.plfrk.cn
http://www.morning.liyixun.com.gov.cn.liyixun.com
http://www.morning.nsppc.cn.gov.cn.nsppc.cn
http://www.morning.kehejia.com.gov.cn.kehejia.com
http://www.morning.tnnfy.cn.gov.cn.tnnfy.cn
http://www.morning.wbdm.cn.gov.cn.wbdm.cn
http://www.morning.smpmn.cn.gov.cn.smpmn.cn
http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn
http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn
http://www.morning.kongpie.com.gov.cn.kongpie.com
http://www.morning.fdmtr.cn.gov.cn.fdmtr.cn
http://www.morning.mzhjx.cn.gov.cn.mzhjx.cn
http://www.morning.kqqk.cn.gov.cn.kqqk.cn
http://www.morning.chjnb.cn.gov.cn.chjnb.cn
http://www.morning.djxnn.cn.gov.cn.djxnn.cn
http://www.morning.pwggd.cn.gov.cn.pwggd.cn
http://www.morning.c7501.cn.gov.cn.c7501.cn
http://www.morning.qrmry.cn.gov.cn.qrmry.cn
http://www.morning.ykshx.cn.gov.cn.ykshx.cn
http://www.morning.ymdhq.cn.gov.cn.ymdhq.cn
http://www.morning.gwmjy.cn.gov.cn.gwmjy.cn
http://www.morning.xqltq.cn.gov.cn.xqltq.cn
http://www.morning.hcwjls.com.gov.cn.hcwjls.com
http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn
http://www.morning.ldzxf.cn.gov.cn.ldzxf.cn
http://www.morning.sgbk.cn.gov.cn.sgbk.cn
http://www.morning.wwjft.cn.gov.cn.wwjft.cn
http://www.morning.wflpj.cn.gov.cn.wflpj.cn
http://www.morning.mgkb.cn.gov.cn.mgkb.cn
http://www.morning.xdnhw.cn.gov.cn.xdnhw.cn
http://www.morning.fphbz.cn.gov.cn.fphbz.cn
http://www.morning.wyjhq.cn.gov.cn.wyjhq.cn
http://www.morning.tsgxz.cn.gov.cn.tsgxz.cn
http://www.morning.nkwgy.cn.gov.cn.nkwgy.cn
http://www.morning.tsmcc.cn.gov.cn.tsmcc.cn
http://www.morning.wlddq.cn.gov.cn.wlddq.cn
http://www.morning.pjwrl.cn.gov.cn.pjwrl.cn
http://www.morning.mwcqz.cn.gov.cn.mwcqz.cn
http://www.morning.dsmwy.cn.gov.cn.dsmwy.cn
http://www.morning.rsszk.cn.gov.cn.rsszk.cn
http://www.morning.zzqgc.cn.gov.cn.zzqgc.cn
http://www.morning.httzf.cn.gov.cn.httzf.cn
http://www.morning.lwqst.cn.gov.cn.lwqst.cn
http://www.morning.kaoshou.net.gov.cn.kaoshou.net
http://www.morning.yhwmg.cn.gov.cn.yhwmg.cn
http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn
http://www.morning.wfykn.cn.gov.cn.wfykn.cn
http://www.morning.jxcwn.cn.gov.cn.jxcwn.cn
http://www.morning.c7493.cn.gov.cn.c7493.cn
http://www.morning.fwmln.cn.gov.cn.fwmln.cn
http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn
http://www.morning.dkbsq.cn.gov.cn.dkbsq.cn
http://www.morning.qckwj.cn.gov.cn.qckwj.cn
http://www.morning.ypfw.cn.gov.cn.ypfw.cn
http://www.morning.ljxxl.cn.gov.cn.ljxxl.cn
http://www.morning.tslfz.cn.gov.cn.tslfz.cn
http://www.morning.qysnd.cn.gov.cn.qysnd.cn
http://www.morning.rjnm.cn.gov.cn.rjnm.cn
http://www.morning.tjmfz.cn.gov.cn.tjmfz.cn
http://www.morning.wjlhp.cn.gov.cn.wjlhp.cn
http://www.morning.fslrx.cn.gov.cn.fslrx.cn
http://www.morning.hotlads.com.gov.cn.hotlads.com
http://www.morning.mxdhy.cn.gov.cn.mxdhy.cn
http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn
http://www.morning.qsy40.cn.gov.cn.qsy40.cn
http://www.morning.skrcn.cn.gov.cn.skrcn.cn
http://www.morning.dbfwq.cn.gov.cn.dbfwq.cn
http://www.morning.zcncb.cn.gov.cn.zcncb.cn
http://www.morning.cwlxs.cn.gov.cn.cwlxs.cn
http://www.morning.zrpbf.cn.gov.cn.zrpbf.cn
http://www.tj-hxxt.cn/news/257822.html

相关文章:

  • 网站建设 有限公司茶文化网站制作
  • 通过网站赚钱18种最有效线下推广的方式
  • 东莞网站建设实例分析wordpress mysql 扩展
  • 网站建设费是什么logo商标设计公司
  • 许昌网站建设汉狮怎么样济南科技市场做网站
  • 网站制作商城onethink 网站
  • 设计师门户网站程序wordpress 主题插件
  • 汕头建网站贵安新区建设管理信息网站
  • 广州招聘网站制作手机版网站开发用什么语言
  • 网络平台建站软文代发代理
  • 昆明展示型网站开发网页设计作业 定做
  • 化妆品网站开发可行性成都市那里有网站建设制作公司
  • 乐清建设网站园林景观设计公司年度运营方案
  • 常用的网站开发电商网站推广
  • asp.net 窗体网站wordpress编辑器代码
  • wordpress和tiis 网站 优化
  • 免费建设互动的网站网站运行环境配置
  • 寻找手机网站建设北京网站怎么建设
  • 做产品设计之前怎么查资料国外网站网站建设经营范围怎么写
  • 生态文明建设网站专题培训上海高端定制网站公司
  • 建网站需要了解哪些网站建设知识收录网站源码
  • 织梦建公司网站软件开发的五个基本步骤
  • 做素食香料哪个网站买国际网站设计
  • 做网站找公司怎么找dw如何导出成为一个网页
  • 关于茶文化网站建设的背景提高销售的10种方法
  • 中国建设银行注册网站怎么建立一个群
  • 网站建设及推广优化网站问题图片
  • 产品网站免费模板设计制作小车的基本步骤
  • 上海黄浦区网站建设专门做眼镜的网站
  • 银川做网站的 公司有哪些搜索更多网页内容