Linux,C:IPv6套接字:写块

时间:2015-09-03 22:18:19

标签: c linux sockets tcp ipv6

我有服务器和客户端应用程序,在Ubuntu1410默认内核上运行IPv6。

服务:套接字监听loal TCP端口并使用select()来处理新的连接和数据;

客户端:套接字通过TCP连接服务器IPv6地址和端口。

可以成功建立连接。 但是,当write()数据,缓冲区大小为128K时,它将在write()中阻塞。

因为我需要写很多数据所以我有一个for循环来调用write()。有时候,write()会成功一两次,但会再次阻塞。

我的应用支持IPv4和Ipv6。 write()适用于IPv4。

而且,如果我测试:: 1(serer和客户端在同一台机器上运行),IPv6也可以工作。

r = write(fd, buf, buf_size);

2 个答案:

答案 0 :(得分:1)

如果TCP发送阻塞,接收器读取速度很慢。

答案 1 :(得分:0)

Linux文件描述符可以设置为非阻塞模式。它可以在创建(open系统调用或socket系统调用)时完成,也可以在事件后通过fctl系统调用完成。有关详细信息,请参见手册页(第2节)。

如果文件描述符设置为非阻塞模式,则对其进行的操作否则将阻止将返回-1并将errno设置为EAGAIN(== EWOULDBLOCK)。