摘要: 通常,recv函数没有数据可用时会阻塞等待。同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞。在套接字非阻塞模式下,行为会改变。在这种情况下,这些函数不会阻塞而是失败,设置errno为EWOULDBLOCK或者EAGAIN。当这些发生时,可以使用poll或select来判断何时能接收或者传输数据。 在Single UNIX Specification中,其实时扩展包含对通用异步... 阅读全文
posted @ 2014-02-25 21:20 ITtecman 阅读(727) 评论(0) 推荐(0) 编辑
摘要: 带外数据(Out-of-band data)是一些通信协议所支持的可选特征,允许更高优先级的数据比普通数据优先传输。即使传输队列已经有数据,带外数据先行传输。TCP支持带外数据,但是UDP不支持。套接字接口对带外数据的支持,很大程度受TCP带外数据具体实现的影响。 TCP将带外数据称为“紧急”数据(“urgent”data)。TCP仅支持一个字节的紧急数据,但是允许紧急数据在普通数据传递机制数据... 阅读全文
posted @ 2014-02-25 21:06 ITtecman 阅读(613) 评论(0) 推荐(0) 编辑
摘要: 套接字机制提供两个套接字选项接口来控制套接字的行为。一个接口用来设置选项,另一个接口允许查询一个选项的状态。可以获取或设置的三种选项: (1)通用选项,工作在所有套接字类型上。 (2)在套接字层次管理的选项,但是依赖于下层协议的支持。 (3)特定与某协议的选项,为每个协议所独有。 Single UNIX Specification仅定义了套接字层的选项(上述三种选项中的前两种选项)。 可... 阅读全文
posted @ 2014-02-25 20:23 ITtecman 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 既然将套接字端点表示为文件描述符,那么只要建立连接,就可以使用read和write来通过套接字通信。通过在connect函数里设置对方地址,数据报套接字也可以“连接”。在套接字描述符上采用read和write是非常有意义的,因为可以传递套接字描述符到那些原先设计为处理本地文件的函数。而且可以安排传递套接字描述符到执行程序的子进程,该子进程并不了解套接字。尽管可以通过read和write交换数据,但这就是这两个函数所能做的一切。如果想指定选项、从多个客户端接收数据包或者发送带外数据,需要采用6个传递数据的套接字函数中的一个。三个函数用来发送数据,三个用来接收数据。首先,考察用于发送数据的函数。最 阅读全文
posted @ 2014-02-25 18:09 ITtecman 阅读(2969) 评论(1) 推荐(0) 编辑
摘要: 如果处理的是面向连接的网络服务(SOCK_STREAM或SOCK_SEQPACKET),在开始交换数据以前,需要在请求服务的进程套接字(客户端)和提供服务的进程套接字(服务器)之间建立一个连接。客户端可以用connect建立一个连接。#include int connect(int sockfd, const struct sockaddr *addr, socklen_t len);返回值:若成功则返回0,出错则返回-1在connect中所指定的地址是想与之通信的服务器地址。如果sockfd没有绑定到一个地址,connect会给调用者绑定一个默认地址。当连接一个服务器时,出于一些原因,连接可 阅读全文
posted @ 2014-02-25 08:04 ITtecman 阅读(1503) 评论(0) 推荐(0) 编辑