初始化函数2

1. socket函数:

#include <sys/socket.h>
int socket(int family, int type, int protocol);

1.1. 参数:

第一个参数指定协议族(我理解为ip族):

AF_INET,AF_INET6

第二个参数指定套接字类型:

SOCK_STREAM,SOCK_DGRAM,(流和数据包)

SOCK_SEQPACKET,SOCK_RAM,(有序分组,原始)

第三个参数不用指出,为0即可.

1.2. 返回值:

套接字描述符.

2. connect函数:

#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);

2.1. 特点:

客户调用connect前不一定非得bind, 内核会确定源ip, 并分配临时端口.

2.2 返回值与错误:

1. ETIMEDOUT:客户没有收到SYN的响应.第一次没有回应后,客户等待6s再发送一个,若无等待24s再发送,总共等75s仍无则返回本错误.(不同系统不同.)

  ps: 可修改等待时间.

2. ECONNREFUSED:对客户的SYN响应是RST,意思是服务器没有进程与客户连接.

  ps: 情况有三种: 服务器并未监听此服务;

          TCP想取消已有连接;

          TCP收到一个不存在的连接的分节.

3. EHOSTUNREACHENETUNREACH: SYN经过的路由器引发'destination unreachable',ICMP错误.

  ps: 内核将保存消息,并等待重发,规定时间内仍未收到则返回这个错误;

  ps: 除此,以下情况也有可能: connect调用不等待就返回.

4. `如果connect错误发生,必须关闭套接字并重新调用socket才连接`.

3. bind函数:

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
  1. 特点:
  2. 如果地址和端口填0,代表内核选择临时的.
  3. 如果选择临时端口,需使用getsockname来返回.
  4. 错误情况:
  5. EADDRINUSE: 地址已使用.

4. listen函数

5. accept函数

posted on 2017-12-08 18:44  willaty  阅读(175)  评论(0编辑  收藏  举报

导航