(2)几个基本函数介绍

原创 2007年09月22日 18:20:00

 

socket()
#include <sys/socket.h>
int socket( int family, int type, int protocol );
返回:非负描述字——成功。-1——出错
family指明协议族。
AF_INET     IPv4协议
AF_INET6    IPv6协议
AF_LOCAL    Unix域协议
AF_ROUTE    路由套接口
AF_KEY      密匙套接口
套接口类型type
SOCK_STREAM   字节流套接口
SOCK_DGRAM    数据报套接口
SOCK_RAW      原始套接口
protocol一般置为0;
不是所有的family和type的组合都是有效的
AF_INET + SOCK_STREAM = TCP
AF_INET6 + SOCKSTREAM = TCP
AF_LOCAL + SOCKSTREAM = YES
AF_INET + SOCK_DGRAM = UDP
AF_INET6 + SOCK_DGRAM = UDP
AF_LOCAL + SOCK_DGRAM = YES
AF_INET + SOCK_RAW = IPV4
AF_INET6 + SOCK_RAW = IPV6
AF_ROUTE + SOCK_RAW = YES;
AF_KEY + SOCK_RAW = YES;
 
bind()
#include <sys/socket.h>
int bind( int sockfd, const struct sockaddr *myaddr, socklen_t addrlen );
返回:0——成功, -1——出错
第二个参数是一个指向特定于协议的地址结构的指针,第三个参数是该地址结构的长度
对于TCP,调用bind可以指向一个端口号。指定一个IP地址。都指定。都不指定共4种情况
1:通配地址+0端口。 内核选择IP地址和端口
2: 通配地址+非0端口 内核选择IP地址。进程指定端口
3:本地IP地址+0端口 进程指定IP地址。内核选择端口
4: 本杜IP+非0端口   进程指定IP和端口
对于IPv4通配地址由常值INADDR_ANY来指定。其值一般为0,他通知内核选择IP地址。
struct sockdr_in servaddr;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
对于IPv6有一个in6addr_any的extern生命在<netinet/in.h>中。可以写为
struct sockdr_in6 serv;
serv.sin6_addr = in6addr_any;
 
connect()
#include <sys/socket.h>
int connect( int sockfd, const struct sockaddr *servaddr, socklen_t addrlen );
返回:0——成功, -1——出错
sockfd是由socket函数返回的套接口描述字,第二,三个参数分别是一个指向套接口地址结构的指针和该结构的大小。
套接口地址结构必须含有服务器的IP地址和端口号

如果是TCP套接口的话。函数激发TCP的三路握手过程。出错才返回。错误情况有如下几种:
1:如果TCP客户没有受到SYN分节的相应。则返回ETIMEDOUT
2:如果对客户的SYN的响应是RST,则表明该服务器主机在我们指定的端口上没有进程在的等待与之连接。
客户一收到RST。马上返回错误ECONNREFUSED;
3:如果客户发出的SYN在中间的路由器上引发了一个目的地不可达ICMP错误。在某规定时间没有响应。则把保存的消息作为EHOSTUNREACH或ENETUNREACH错误返回给进程。
 
connect()
#include <sys/socket.h>
int listen( int sockfd, int backlog );
返回:0——成功。-1——出错。
他仅被TCP服务器调用。做两件事
1:当函数socket创建一个套接口时,它被假设为一个主动套接口。也就是说他是一个将调用connect发起连接的客户套接口,将未连接的套接口转换称被动套接口,指示内核应接受指向此套接口的连接请求 。调用后导致套接口从CLOSEN状态转换到LISTEN状态
2:函数第二个参数规定了内核为此套接口排队的最大连接个数
参数backlog:
对于给定的舰艇套接口。内核要维护两个队列:
1:未完成连接队列。为每个这样的SYN分节开设一个条目,已由客户发出并到达服务器。服务器正在等待完成相应的TCP三路握手过程。这些套接口都处于SYN_RCVD状态
2:以完成连接队列,为每个以完成TCP三路握手过程的客户开设一个条目。这些套接口都处于ESTABLISHEDAA状态
  backlog   是未经过处理的连接请求队列可以容纳的最大数目。   
  即每一个连入请求都要进入一个连入请求队列,等待   
  listen   的程序调用accept()函数来接受这个连接。当系统还没有   
  调用accept()函数的时候,如果有很多连接,那么本地能够等待的最大数目就是backlog   的   
  数值。
 
accept()
accept有TCP服务器调用。从已完成连接队列头返回下一个已完成连接。
#include <sys/socket.h>
int accept( int sockfd, struct sockaddr * cliaddr, socklen_t *addrlen );
参数cliaddr和addrlen用来返回连接对方进程(客户)的协议地址。addrlen是值—结果参数。返回时是内核存在此套接口地址结构内的准确字节数。
如果函数执行成功。返回值是由内核自动生成的一个全新描述字。代表与客户的TCP连接。
第一个参数称为监听套接口(listening socket)描述字(由函数socket生成的描述字。用做bind和listen的第一个参数).把它的返回值称为已连接套接口描述字。
注意区分监听套接口和已连接套接口。一个服务器只生成一个前者直到服务器关闭。内核为每个被接受的客户连接创建一个后者完成这个客户的服务时,关闭后者
 

Zabbix 3.0 基础介绍 [一]

原文出自 http://www.abcdocker.com/abcdocker/1402 Zabbix 3.0 基础介绍 [上] zabbix 一、Zabbix介绍 ...
  • linuxlsq
  • linuxlsq
  • 2016年09月21日 11:33
  • 4663

Tensorflow | 基本函数介绍

这次来总结下这几天学习tensorflow的心得,包含了一些基本的函数,例如,加减乘除等,下面来一一介绍,并给出具体的例子。 两个小的tips 我的版本:anaconda 4.2 tensorflo...
  • xxzhangx
  • xxzhangx
  • 2017年01月18日 23:04
  • 4702

【Unity3D入门教程】Unity3D界面介绍及游戏对象基本操作

本文介绍了Unity3D界面及游戏对象基本操作。
  • zzlyw
  • zzlyw
  • 2017年01月06日 17:16
  • 7595

MATLAB基本操作(七):有关文件路径的几个函数在编程中的作用

有关文件路径的几个函数在编程中的作用 Last Edit 2014/1/16 1,genpath: (gen=generate,顾名思义就是一个产生路径的函数,这个路径须存在) genpath ...
  • jxlijunhao
  • jxlijunhao
  • 2014年01月16日 20:07
  • 1791

梳理一下JTAG控制器最基本的几个底层函数。

上位机最最基本有两个函数,如下: //tested ok int ejtag_read_back(char*buff,unsigned int bytes)//buff 长度将512的整数倍 { p...
  • mcupro
  • mcupro
  • 2013年08月12日 22:35
  • 522

opencv基本的几个图像处理函数

转眼大学四年就要过去了,终于到了做毕设的时候。选的题目我只能说比较僵,目标跟踪。。。根本不会,不过研究生导师是搞这方面的,早点学习一下也挺不错的。 我老师给我的要求是使用opencv编写一个目标跟踪的...
  • ZouCharming
  • ZouCharming
  • 2017年04月04日 21:14
  • 961

opencv读取图像的几个基本函数,imread、namedWindow、imshow、imwrite

最近在使用opencv做图像拼接,所以找了些基础资料来学习,为查阅方便,纪录在此。         原文链接:http://www.cnblogs.com/eyeszjwang/articles/2...
  • honey1992
  • honey1992
  • 2015年11月26日 14:35
  • 1736

简明Python教程读书笔记-2 几个基本概念

主要介绍Python中的常量、变量、数据类型等概念。 1. 常量       字面常量(literal constant):形如数字、字符串之类的字面意义上的常量       数:python中...
  • zenghui08
  • zenghui08
  • 2011年02月09日 16:52
  • 488

一个中兴的面试题,输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解(c语言递归函数分解法)

原题目:输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解 c语言解法分析:            先判定n和m的大小,如果m小于n,则只需从1...
  • u013251992
  • u013251992
  • 2013年12月25日 16:19
  • 1927

tensorflow入门2 几个函数的总结和手写数字识别

tensorflow中很多函数是对神经网络中用到的一些功能的封装 tf.nn.softmax_cross_entropy_with_logits(logits,labels,name=None)函数,...
  • u010041824
  • u010041824
  • 2017年03月23日 20:02
  • 1296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(2)几个基本函数介绍
举报原因:
原因补充:

(最多只允许输入30个字)