初始化函数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. EHOSTUNREACH或ENETUNREACH: 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);
特点:
如果地址和端口填0,代表内核选择临时的.
如果选择临时端口,需使用getsockname来返回.
错误情况:
EADDRINUSE: 地址已使用.
4. listen函数
5. accept函数
【本文章出自博客园willaty,转载请注明作者出处,误差欢迎指出~】