读书人

socket 发送有关问题

发布时间: 2012-09-16 17:33:16 作者: rapoo

socket 发送问题
创建的socket默认是阻塞的,所以看书上一般用select检查检查各个socket的状态,来判断socket可读还是可写。我一般也是这样做的。但最近看了send之后,感觉还是有些问题不理解。比如,利用selelct检查到socket可写,但是如果我的socket是阻塞的,发送的长度比较大,有可能发送很久也发送不成功,一样会阻塞住。有没有方法,可以检查到socket可以发送的状态后,再检查可以发送多少字节,那么我就自动调节发送的字节数,不会发送的时候会有可能出现发送阻塞住的情况发生。

[解决办法]
[Quote=引用:]

引用:
1,检查send返回值,如果返回值小于请求值或者返回值为-1且errno==EAGAIN, 那么缓存未发出的数据,注册Write事件。

2,如果触发了Write事件,将缓存的数据再次写出,同第一步一样,如果全部发出则取消Write事件,否则继续保留Write事件等待下次触发继续写出剩余数据。

3,如果缓存里有数据,而此时希望继续发送新数据,为了保证数据的顺……
[/Quote]

不知道非阻塞?

读书人网 >C语言

热点推荐