项目需要写一个主动连接且定时发送数据的客户端程序,并保证传输数据的可靠性和稳定性。
注意的问题有:
1.connect返回值判定
之前的程序
if(connect(tcp_client_sock,(struct sockaddr*)&server, server_length) < 0)
//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接
...
}
但是在网上查询发现:当我们以非阻塞的方式来进行连接的时候,返回的结果如果是 -1,这并不代表这次连接发生了错误,如果它的返回结果是 EINPROGRESS,那么就代表连接还在进行中。后面可以通过poll或者select来判断socket是否可写,如果可以写,说明连接完成了。
更改如下:
//先定位为非阻塞模式,立即返回状态;如有错误存为SO_ERROR值
if((flags = fcntl(tcp_client_sock,F_GETFL, 0 )) < 0)