我是一位经验丰富的网络程序员,面临需要一些建议的情况。
我需要在几个传出接口上分发一些数据(通过不同的 tcp 套接字连接,每个连接对应于每个接口)。但是,重要的部分是,我应该能够在具有更好带宽的接口上发送更多/大部分数据,即可以更快发送的数据。
我的意见是为此目的使用select api(unix和windows)。我过去使用过 select、poll 甚至 epoll。但只要数据可用,它总是用于从多个套接字读取。
在这里,我打算按顺序在几个接口上写入连续的数据包,然后监视每个接口的写入描述符(选择参数),然后哪个可用(意味着它能够先发送数据包),我将继续发送更多数据包通过那个描述符。
我能在这里实现我的意图吗?即,如果我有一个 10Mbps 链路的接口与另一个 1Mbps 链路的接口,我希望能够通过更快的接口获取大部分数据包。
更新 1:我想知道在这种情况下 select 的行为是什么,即当您在读取描述符上调用 select 时,会返回数据可用的那个。但是,在我的场景中,当我们在描述符上写入并等待 select 返回首先完成写入的描述符时,select 是否确保仅在写入整个数据包时才返回,即说我尝试一次写入 1200 个字节。它只会在全部 1200 都返回或出现永久性错误时返回吗?我不确定 select 会如何表现,也没有找到任何描述它的文档。