本文转载自微信公众号《Linux开发那些事》,作者LinuxThings。转载此文请联系Linux开发那些事公众号.写过网络程序的同学应该都知道connect函数。在socket开始读写操作之前,必须先建立连接,即TCP三次握手。这个过程是在connect函数中完成的。连接功能本身被阻止。异步connect的功能可以通过设置socket选项,调用select/poll函数来实现。默认套接字是阻塞模式。当处于阻塞模式时,调用connect函数后,会等待连接结果返回,要么成功要么失败,connect函数返回0,成功则返回-1,失败则返回-1。在局域网中,调用connect函数基本上会立即返回结果。当服务器在国外的时候,connect函数会被阻塞一段时间,大概几秒。具体要看时间。为什么对网络条件使用异步连接?Linux下默认的connect超时时间是一分钟左右(不同的Linux版本略有不同)。在实际开发中,这个时间显得有点长。客户端服务,尽量减少阻塞,所以一般使用异步连接技术。对于每一个写网络程序的同学来说,异步连接应该是必须掌握的一项基本技能。异步connect的步骤(1)创建socket并调用fcntl函数设置为非阻塞(2)调用connect函数,返回0表示连接成功,返回-1,需要查看错误码如果错误码为EINPROGRESS,表示正在建立连接如果错误码为EINTR,则表示发生了系统中断如果是其他错误码,调用close(fd)函数关闭socket,连接fails(3)将socket添加到select/poll的可写文件描述符集合中,并设置超时时间(4)判断select/poll函数的返回值小于等于0表示失败。其他意味着套接字是可写的。调用getsockopt函数捕获socket的错误信息。具体代码如下:/*异步连接测试代码,test_connect.cpp*/#include
