深入探究connect函数

网络编程socket api存在一批核心接口,connect函数就是这些核心接口的一个函数,它完成主动连接的过程。

connect函数的功能可以用一句话来概括,就是完成面向连接的协议的连接过程,它是主要连接的。

函数参数:

int connect(int sockfd, const struct sockaddr* server_addr, socklen_t addrlen)
返回:0──成功, -1
──失败。

参数含义

参数sockfd
指定数据发送的套接字,解决从哪里发送的问题。内核需要维护大量IO通道,所以用户必需通过这个参数告诉内核从哪个IO通道,此处就是从哪个socket接口中发送数据。sockfd是先前socket返回的值。
参数server_addr
指定数据发送的目的地,也就是服务器端的地址。这里服务器是针对connect说的,因为connect是主动连接的一方调用的,所以相应的要存在一个被连接的一方,被动连接的一方需要调用listen以接受connect的连接请求,如此被动连接的一方就是服务器了。
参数addrlen
指定server_addr结构体的长度。我们知道系统中存在大量的地址结构,但socket接口只是通过一个统一的结构来指定参数类型,所以需要指定一个长度,以使内核在进行参数复制的时候有个有个界限。

 与所有的socket网络接口一样,connect总会在某个时候可能失败,此时它会返回-1,相应的errno会被设置,用户可能通过这个值确定是哪个错误。常见的错误有对方主机不可达或者超时错误,也可以是对方主机没有相应的进程在对应端口等待。

    返回值:没有错误发生,返回0;否则返回SOCKET_ERROR。
    connect函数可用于面向连接套接字,也可用于无连接套接字。
    无连接套接字:对于无连接的套接字(SOCK_DGRAM)
    该套接字与目标地址之间建立默认的对应关系,网络数据交互发生。可以直接使用 send,而不是用sendto来向该地址发送数据;内核会丢弃所有发送给该套接字的源地址不是connect 地址的报文。再次调用connect函数:此时name和namelen两个参数均为空指针,就会将该套接字恢复为未连接状态,再调用send函数,系统会提示WSAENOTCONN错误码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值