05 TCP套接字之connect函数

本文详细介绍了TCP套接字中的connect函数,包括其函数原型、参数解析、调用流程。强调在调用connect前需先使用socket函数获取文件描述符,尽管可不绑定IP和端口,connect会自动绑定。当connect返回-1时,可能是由于被中断,并不一定是致命错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前面介绍了socket函数获取文件描述符, bind函数是为了让本地协议与套接字进行绑定, 本节介绍让客户端主动与服务端进行连接的connect函数.


函数原型

connect函数建立与TCP服务器的连接.

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

成功 : 返回0;

失败 : 返回-1. 并设置errno的值.

  • errno对应的值 :

    描述
    ETIMEDOUTTCP客户端没有收到SYN分节的响应
    ECONNREFUSEDTCP客户端的SYN响应是RST
    EHOSTUNREACH/ENETUNREACH对端不可达
    EINTR被信号等处理打断

函数参数
  • sockfd是调用socket函数返回的文件描述
  • addr要连接的对端的套接字地址结构
  • addrlen是套接字地址结构的大小

函数调用
in ret;
struct sockaddr_in sockaddr;
bzero(&sockaddr, sizeof(sockaddr)); // 全部填0
sockaddr.sa_family = AF_INET;	// 设置域
sockaddr.sin_port = htons(port);	// 绑定端口
sockaddr.sin_addr.in_addr = inet_addr(addr);	// 绑定地址

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
while(1)
{
	ret = connect(sockfd, (struct sockaddr*)&sockaddr_in, sizeof(sockaddr_in));
	if(ret < 0) 
    	if(errno == EINTR)	// 被其他处理打断重启
        	continue;
		else
        	EXIT("bind");
    break;
}

总结
  • 调用connect函数之前一定要调用socket函数, 但可以不调用bind函数将IP或者端口进行绑定, connect函数会随机绑定一个空闲的端口
  • 返回值为-1并不一定是致命错误, 可能是被其他处理打断了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值