1.soket函数
1 #include <sys/soket.h> 2 int soket(int family, int type, int protocol); 3 //返回:若成功则为非负描述符,若出错则为-1
family参数指明协议族,type参数知名套接字类型, protocol设为协议类型常值或者设为为0。
AF_XXX和PF_XXX对比, AF_前缀表示地址族,PF_前缀表示协议族。
2.connect函数
TCP客户用connect函数来建立与TCP服务器的连接。
1 #include <sys/socket.h> 2 int connect(int sockfd, const struct sockeaddr *servaddr, socklen_t addrlen); 3 //返回:若成功则为0,若出错则为-1
sockfd是由socket函数返回的套接字描述符,第二第三个参数分别是一个指向套接字地址结构的指针和该结构的大小。
如果是TCP套接字,调用connect函数将激发TCP的三路握手过程,且仅在连接建立成功或出错时才返回。
出错返回的情况如下:
1)若TCP客户没有收到SYN分解的响应,则返回ETIMEDOUT错误。
2)若对客户的SYN的响应是RST(复位),则表明该服务器主机在我们指定的端口没有进程在等待与之连接(例如服务器进程没在运行)。
RST是TCP在发生错误时发送的一个分节(一种硬错误)。产生RST的三个条件:目的地为某端口SYN到达,然而该端口上没有正在监听的服务器;
TCP想取消一个已有的连接;TCP接收到一个根本不存在的连接上的分节。
3)若客户发出的SYN在中间的某个路由器上引发了一个“destination unreachable" ICMP错误(一种软错误)。