网络编程中的关键问题总结总结下网络编程中关键的细节问题,包含连接建立、连接断开、消息到达、发送消息等等;连接建立包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接。accept接受连接的问题在本文最后会聊到,这里谈谈connect的关键点;使用非阻塞连接建立需要注意:connect/select返回后,可能没有连接上;需要再次确认是否成功连接;步骤为:使用异步connect直接连接一次,因为使用了非阻塞,函数立刻返回;检查返回值,为0成功连接,否则加入到select/epoll中监控;当有写事件时,连接成功;当即可读又可写时,可能是有错误或者连接成功后有数据已经发过来;所以,此时,需要用getsockopt()读取socket的错误选项,二次确认是否真的连接成功:Fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
error = 0;
if ( (n = connect(sockfd, saptr, salen)) < 0)
if (errno != EINPROGRESS)
return(-1);
/* Do whatever we want while the connect is taking place. */
if (n == 0)
goto done; /*
...
继续阅读
(11)