SELECT_fncl.png
示例
客户端创建socket
调用fcntl设置阻塞模式
调用connect开始连接。...如果返回0,则连接成功
如果连接未成功
调用select来等待连接建立成功完成
如果select返回0,则表示建立连接超时。...如果select返回大于0的值,则需要检查套接口描述符是否可读或可写;如果套接口描述符可读或可写,则我们可以通过调用getsockopt来得到套接口上待处理的错误(SO_ERROR),如果连接建立成功,...这个错误值将是0,如果建立连接时遇到错误,则这个值是连接错误所对应的errno值(比如:ECONNREFUSED,ETIMEDOUT等)
连接成功后再设置为阻塞模式(方便读写)
关闭socket
select...读取套接口上的错误"是遇到的第一个可移植性问题;如果出现问题,getsockopt源自Berkeley的实现是返回0,等待处理的错误在变量errno中返回;但是Solaris会让getsockopt返回