第四十七章、connect函数

上一章讲了socket函数,创建套接字描述符,接下来按照四十二章的流程图,我们需要一个函数来与服务器建立一个连接,这个函数就是connect函数。

我们来看下它的原型:

int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)

参数fd是函数socket返回的套接字描述符,参数addr指定远程服务器的套接字地址,包括服务器的IP地址和端口号,参数len指定这个套接字地址的长度,connect成功返回0,失败返回-1.

我们来看一下程序:

第四十七章、connect函数

这里呢我和在局域网上用另外一台Windows 10系统的电脑的tcp测试工具进行了连接。

在这里我们看到,我们只需要指定服务器端的IP地址和端口号,客户端的端口好并不需要指定,系统会自动分配端口:

第四十七章、connect函数

connect函数是主动建立和服务器之间的连接,他会地洞tcp协议的3次握手过程,在建立连接滞后会发生错误时,函数返回,当我将测试工具关闭后运行上面的程序就会连接失败:

第四十七章、connect函数

当然我们还可以将错误打印出来:

第四十七章、connect函数

此时在连接时的状态我们也看下:

第四十七章、connect函数

我们可以看到tcp的连接状态为syn_sent,意味着没有得到服务端的反馈。在180秒之后还没得到反馈就会返回超时错误。

那么我们在把代码修改一下把IP地址改成不在局域网中的地址,那么会是什么结果呢:

第四十七章、connect函数

好了,其他的大家可以在自己电脑测试下哦