我有服务器和客户端应用程序,在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);
答案 0 :(得分:1)
如果TCP发送阻塞,接收器读取速度很慢。
答案 1 :(得分:0)
Linux文件描述符可以设置为非阻塞模式。它可以在创建(open
系统调用或socket
系统调用)时完成,也可以在事件后通过fctl
系统调用完成。有关详细信息,请参见手册页(第2节)。
如果文件描述符设置为非阻塞模式,则对其进行的操作否则将阻止将返回-1并将errno
设置为EAGAIN
(== EWOULDBLOCK
)。