2.基本套接字函数

socket函数

为了执行网络IO,一个程序首先要做的就是调用socket函数,指定期望的通信协议(使用IPv4的TCP、使用IPv6的UDP、UNIX字节域协议等):

#include <sys/socket.h>
int socket(int family,int type,int protocol);
    --若成功返回非负描述符,失败返回-1

family type protocol可取的值如下,另外protocol可以设为0。

family 协议簇
AF_INET IPv4协议
AF_INET6 IPv6协议
AF_LOCAL UNIX域协议
AF_ROUTE 路由套接字
AF_key 密钥套接字
type 套接字类型
SOCK_STREAM 字节流套接字
SOCK_DGRAM 数据报套接字
SOCK_SEQPACKET 有序分组套接字
SOCK_RAW 原始套接字
protocol 协议类型常值
IPPROTO_TCP TCP传输协议
IPPROTO_UDP UDP传输协议
IPPROTO_SCTP SCTP传输协议
  • 注意:family和type的组合可以确定协议类型。
  • 比如:
  • SOCK_STREAM+AF_INET/AF_INET6 —–>TCP/SCTP
  • SOCK_DGRAM+AF_INET/AF_INET6 ——->UDP
  • SOCK_SEQPACKET+AF_* ———>SCTP

connect函数:

TCP客户端用connect函数来建立与TCP服务器的连接

#include  <sys/socket.h>
int connect(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen);
        ----成功返回,失败返回-1

sockfd是socket函数返回的套接字描述符,第二个第三个分别是一个指向套接字地址结构的指针和地址结构的大小。
如果是TCP连接,调用conncet将会激发TCP的三路握手过程,而且仅在成功或者出错时返回。出错返回有以下两种:

  1. TCP客户没有受到SYN分节的响应,则返回ETIMEOUT的错误
  2. 若对客户SYN的回应是RST(表示复位),则表明该服务器主机在我们指定的端口上没有进程在等待与之连接。
  3. 若客户发出的SYN在某个路由器上引发了一个”destination unreachable”ICMP错误,则认为是一种软错误。


    bind函数

    bind函数把一个本地协议地址赋予一个套接字。

#include  <sys/socket.h>
int bind(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen);
        ----成功返回0,失败返回-1

猜你喜欢

转载自blog.csdn.net/arloor/article/details/78121265