瀏覽代碼

getaddrinfo: support for setting port from service argument (numeric only)

Jeremy Soller 6 年之前
父節點
當前提交
38da5552e8
共有 1 個文件被更改,包括 11 次插入1 次删除
  1. 11 1
      src/header/netdb/mod.rs

+ 11 - 1
src/header/netdb/mod.rs

@@ -686,8 +686,18 @@ pub unsafe extern "C" fn getaddrinfo(
 
     *res = ptr::null_mut();
 
+    let mut port = 0;
+    if let Some(service) = service_opt {
+        //TODO: Support other service definitions as well as AI_NUMERICSERV
+        match str::from_utf8_unchecked(service.to_bytes()).parse::<u16>() {
+            Ok(ok) => port = ok,
+            Err(_err) => ()
+        }
+    }
+
     //TODO: Check hosts file
     if let Some(node) = node_opt {
+        //TODO: Support AI_NUMERICHOST
         let lookuphost = match lookup_host(str::from_utf8_unchecked(node.to_bytes())) {
             Ok(lookuphost) => lookuphost,
             Err(e) => {
@@ -703,7 +713,7 @@ pub unsafe extern "C" fn getaddrinfo(
 
             let ai_addr = Box::into_raw(Box::new(sockaddr_in {
                 sin_family: AF_INET as sa_family_t,
-                sin_port: 0,
+                sin_port: htons(port),
                 sin_addr: in_addr,
                 sin_zero: [0; 8]
             })) as *mut sockaddr;