Closed 4kangjc closed 1 year ago
直接在Endpoint那里加一个EndpointFromDomain吧
getaddrinfo确实更好,gethostbyname被deprecate了
但是EndpointFromDomain有点奇怪,from ipv4/6这些都是工厂方法,而这个domain实际上是在做解析,可能失败可能返回多个,跟工厂性质已经不一样了。
optional<vector<Endpoint>> ResolveDomainName(string_view)
之类的可能比较合适。另外service参数感觉没啥必要,一方面现在很少有人用https之类的写法指定端口号,另一方面真的指定端口号的时候,这个service参数反而很难传。(另外就这个函数名来说的话,Domain name因为不涉及到端口,所以也不太适合有这个参数)
嗯好,error code要返回吗
嗯好,error code要返回吗
std::variant<std::vecotr<Endpoint>, int>
getaddrinfo确实更好,gethostbyname被deprecate了
但是EndpointFromDomain有点奇怪,from ipv4/6这些都是工厂方法,而这个domain实际上是在做解析,可能失败可能返回多个,跟工厂性质已经不一样了。
optional<vector<Endpoint>> ResolveDomainName(string_view)
之类的可能比较合适。另外service参数感觉没啥必要,一方面现在很少有人用https之类的写法指定端口号,另一方面真的指定端口号的时候,这个service参数反而很难传。(另外就这个函数名来说的话,Domain name因为不涉及到端口,所以也不太适合有这个参数)
service还可以传"80", "12345"的端口字符串
那用Expected<vector<…>, int>
好了
service那个一方面跟这个函数名不怎么搭(domain name的话不涉及port),一方面真用端口的话没有背景知识的人(用户一般不会关注底层实现)也不理解为什么类型不是int。
不过想了下,因为Endpoint不能手动改端口号,不允许指定端口号确实有点难用,那参数里加上int result_port=0
吧
https://github.com/Tencent/flare/blob/bb5cd22e54f40f7bc228c294d89bdab55966ee48/flare/rpc/name_resolver/util/domain_name_resolver.cc#L45-L58