5.4. connect() ---嘿,是你嗎?
現在我們假設你是個telnet 程序。你的用戶命令你得到套接字的文件 描述符。你聽從命令調用了socket()。下一步,你的用戶告訴你通過端口 23(標准 telnet 端口)連接到"10.12.110.57"。你該怎麼做呢? 幸運的是,你正在閱讀 connect()--如何連接到遠程主機這一章。你可不想讓你的用戶失望。
下面是他的原型:
#include<sys/types.h>
#include<sys/socket.h>
connect(intsockfd, struct sockaddr *serv_addr, int addrlen);
sockfd 是系統調用socket() 返回的套接字文件描述符。serv_addr 是包含IP地址和端口的struct sockaddr。addrlen是這個結構的長度。
我們還是使用getaddrinfo()函數返回的各個參數。
下面的例子是連接到www.2cto.com 的3490端口:
struct addrinfohints, *res;
int sockfd;
memset(&hints,0, sizeof(hints));
hints.ai_family =AF_UNSPEC;
hints.ai_socktype= SOCK_STREAM;
getaddrinfo(www.2cto.com , “3490”, &hints, &res);
// make a socket:
sockfd =socket(res->ai_family, res->ai_socktype, res->ai_protocol);
// connect!
connect(sockfd,res->ai_addr, res->addrlen)
同時,你可能看到,我沒有調用bind()。因為我不在乎本地的端口號。 我只關心我要去那。內核將為我選擇一個合適的端口號,而我們所連接的地方也自動地獲得這些信息。一切都不用擔心。
摘自 xiaobin_HLJ80的專欄